我在做淘汰赛。我有一个来自数据库的数组列表,通过进行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>
答案 0 :(得分:2)
我认为角色需要是可观察的。然后你可以使用
roleid() === 1
或
roleid() === true
适合您的情况。
答案 1 :(得分:0)
如果roleid是一个可观察的并且设置为字符串值,那么这将起作用。
knockout“checked”仅比较字符串值与字符串值,因此value =“1”内的值被视为字符串。
因此,如果roleid设置为
,则会检查您的复选框viewModel.roleid = ko.observable(“1”);
答案 2 :(得分:0)
您可以使用 checkedValue 绑定,并可以将observableArray分配给已检查绑定。
来自文档
如果绑定还包含checkedValue,则定义checked对象使用的值而不是element的value属性。如果您希望值不是字符串(例如整数或对象),或者您希望动态设置值,那么这非常有用。
以下是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小提琴演示使用。