2014-02-24 51 views
0

我在淘汰賽js。我有一個來自數據庫的數組列表,通過ajax調用並保存knockout observable數組中的所有值。如何檢查基於陣列值的複選框淘汰賽js

我正在循環訪問數組。根據我想要檢查或取消選中複選框的值。下面是我如何做,但這似乎並沒有工作。我可以看到數組中存在roleid的值,但如果roleid的值爲true,則不檢查複選框。我在這裏做錯了什麼。

<tbody data-bind="foreach:$root.test"> 
<tr>  
    <div><input type="checkbox" value="1" data-bind="checked: roleid == 1"/></div> 
</tr> 
</tbody> 

回答

1

我認爲角色需要被觀察到。然後你就可以使用

roleid() === 1 

roleid() === true 

兩者都適合你的情況。

0

如果roleid是可觀察值並且設置爲字符串值,這將工作。

knockout「checked」只比較字符串值和字符串值,所以value =「1」內的值被認爲是一個字符串。

所以你的複選框將被檢查,如果角色ID就像設置此

viewModel.roleid = ko.observable( 「1」);

0

您可以使用checkedValue綁定,並可以將observableArray分配給,檢查的綁定。

從技術文檔

如果綁定還包括爲CheckedValue,這個定義所使用的值檢查結合,而不是元素的值屬性。如果您希望該值不是字符串(例如整數或對象),或者希望動態設置該值,這非常有用。

下面是javascript代碼:

function viewModel() 
{ 
    var self = this; 

    //the array list which you can get from the server 
    self.items = ko.observableArray([ 
      { item: '1' }, 
      { item: '2' }, 
      { item: '3' }, 
      { item: '4' } 
     ]); 

    //the array of items which you want to be checked 
    self.chosenItems = ko.observableArray(
    [ 
     self.items()[1], 
     self.items()[3] 
    ] 
    ); 
} 

HTML代碼

<div data-bind="foreach: items"> 
    <input type="checkbox" 
      data-bind="checkedValue: $data, checked: $root.chosenItems" /> 
    <span data-bind="text: item"></span><br /> 
</div> 

而且here是JS的小提琴演示使用。