2013-08-05 79 views
2

在淘汰賽js試圖執行一個數據的數組foreach顯示覆選框。我遇到的問題是,在與其中一個框交互之前,檢查的數據綁定似乎不運行。例如,下面我生成了5個文本框,其中沒有一個顯示爲選中狀態。然而,當我點擊「一個」時,「兩個」和「四個」也被檢查,因爲它們應該從頭開始。淘汰js複選框檢查綁定

的Javascript:

var viewModel = {}; 

viewModel.choices = ["one", "two", "three", "four", "five"]; 
viewModel.selectedChoices = ko.observableArray(["two", "four"]); 

viewModel.selectedChoicesDelimited = ko.dependentObservable(function() { 
     return viewModel.selectedChoices().join(","); 
    }); 

ko.applyBindings(viewModel); 

HTML:

<ul class="options" data-bind="foreach: choices"> 
    <li><label><input type="checkbox" name="NotifyMembers" data-bind="checked: $parent.selectedChoices, attr: { value: $data }" /><span data-bind="text: $data"></span></label></li> 
</ul> 
<hr /> 
<div data-bind="text: selectedChoicesDelimited"></div> 

小提琴是:http://jsfiddle.net/bvGG3/1/

感謝您的幫助。

回答

11

在版本3.0之前的淘汰賽中,綁定會依次觸發,所以您的問題是您的checked綁定在綁定attr之前觸發。

所以,你需要改變你的綁定順序:

<input type="checkbox" name="NotifyMembers" 
     data-bind="attr: { value: $data }, checked: $parent.selectedChoices" /> 

演示JSFiddle

或者當您更新到3.0(演示JSFiddle)時,您的原始代碼將起作用。