2011-08-29 11 views
1

knockout.js가있는 라디오 버튼을 비활성화하려면 어떻게합니까? 나는 사용자가 그것을 선택할 수 있기를 원하지 않는다. 내 아래의 템플릿이 작동하지 않습니다.knockout.js로 라디오 버튼 비활성화

<div id="answers" data-bind="template: { name: 'answerTmpl', data: interactive.answers }"> 
    </div> 

    <script id="answerTmpl" type="text/html"> 

     {{each(index, value) $data}} 
     <div> 
      <input type="radio" value="${index}" name="Answer" data-bind="disable: app.viewModel.avatars.speaking, checked: app.viewModel.interactive.answerSelected"/> <span>${value}</span> 
     </div> 
     {{/each}} 
    </script> 

은 당신이 명시 적으로 평가해야처럼 보이는, 당신은 전역 변수 대신 바운드 데이터를 사용하는 경우

(function (app, $, undefined) { 

    app.viewModel = app.viewModel || {}; 

    app.viewModel.avatars = { 
     speaking: ko.observable(false), 
     loaded: ko.observable(false) 
    }; 

(function (app, $, undefined) { 

    app.viewModel = app.viewModel || {}; 

    app.viewModel.interactive = { 
     timeout: 1500, 
     answers: ko.observableArray(), 
     answerSelected: ko.observable(''), 
     correctAnswer: ko.observable(-1), 
     bookPage: ko.observable(1), 
     chapterEmail: ko.observable(''), 
     trialogue: { 
      inProgress: ko.observable(false), 
      response: ko.observable(''), 
      conversation: ko.observableArray() 
     } 
    }; 

    app.interactive.init = function() { 
     ko.applyBindings(app.viewModel); 
    }; 
+0

그냥 avatars.speaking 또는 avatars.speaking()을 사용하십시오. 여기를보세요 http://knockoutjs.com/documentation/enable-binding.html – Aviatrix

+0

이 작품은 저에게 적합합니다 : http://jsfiddle.net/E5aqu/ 예제를 간소화하고 관련 코드를 더 많이 포함 할 수 있습니까? – Douglas

+0

jquery 템플릿을 사용하고 있습니다. 내 뷰 모델은 두 개의 서로 다른 js 파일로 구성됩니다. –

답변

2

을 app.interactive.js app.avatars.js 기능 : http://jsfiddle.net/nFgnj/

<input type="radio" value="${index}" name="Answer" 
    data-bind="disable:app.viewModel.avatars.speaking(), 
       checked:app.viewModel.interactive.answerSelected()" /> 

app이 전역 변수가되기 때문에이 솔루션이 마음에 들지 않습니다.