Javascript 如何在knockout js中基于数组值检查复选框

Javascript 如何在knockout js中基于数组值检查复选框,javascript,knockout.js,Javascript,Knockout.js,我在做击倒js。我有一个来自数据库的数组列表,通过调用ajax并将所有值保存在knockout observable数组中 我正在阵列中循环。基于我要选中或取消选中复选框的值。下面是我的做法,但这似乎不起作用。我可以看到数组中存在roleid的值,但如果roleid的值为true,则不选中复选框。我做错了什么 <tbody data-bind="foreach:$root.test"> <tr> <div><input type=

我在做击倒js。我有一个来自数据库的数组列表,通过调用ajax并将所有值保存在knockout observable数组中

我正在阵列中循环。基于我要选中或取消选中复选框的值。下面是我的做法,但这似乎不起作用。我可以看到数组中存在roleid的值,但如果roleid的值为true,则不选中复选框。我做错了什么

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

我认为roleid需要被观察到。然后你可以使用

roleid() === 1


无论哪一个适合您的情况。

如果roleid是可观察的,并且被设置为字符串值,那么这将起作用

敲除“checked”仅比较字符串值与字符串值,因此value=“1”中的值被视为字符串

因此,如果roleid是这样设置的,您的复选框将被选中

viewModel.roleid=ko.可观察(“1”)

您可以使用checkedValue绑定,并可以将observableArray分配给checked绑定

从文件

如果绑定还包括checkedValue,则这将定义选中绑定使用的值,而不是元素的value属性。如果希望值不是字符串(例如整数或对象),或者希望动态设置值,则此选项非常有用

以下是javascript代码:

Html代码



Js小提琴演示了它的使用

roleid() === true
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]
     ]
   );
}
<div data-bind="foreach: items">
    <input type="checkbox" 
           data-bind="checkedValue: $data, checked: $root.chosenItems" />
    <span data-bind="text: item"></span><br />
</div>