【问题标题】:How to check checkbox based on array value in knockout js如何在淘汰赛js中根据数组值检查复选框
【发布时间】:2014-02-24 14:52:28
【问题描述】:
我正在做淘汰赛 js。我有一个来自数据库的数组列表,方法是进行 ajax 调用并将所有值保存在敲除可观察数组中。
我正在遍历数组。根据我要选中或取消选中复选框的值。以下是我的做法,但这似乎不起作用。我可以看到数组中存在 roleid 的值,但如果 roleid 的值为 true,则不会选中复选框。我在这里做错了什么。
<tbody data-bind="foreach:$root.test">
<tr>
<div><input type="checkbox" value="1" data-bind="checked: roleid == 1"/></div>
</tr>
</tbody>
【问题讨论】:
标签:
javascript
knockout.js
【解决方案1】:
我认为 roleid 需要是可观察的。然后就可以使用了
roleid() === 1
或
roleid() === true
以适合您的情况为准。
【解决方案2】:
如果 roleid 是可观察的并且设置为字符串值,这将起作用。
knockout "checked" 仅比较字符串值与字符串值,因此 value="1" 中的值被视为字符串。
如果这样设置roleid,您的复选框将被选中
viewModel.roleid = ko.observable("1");
【解决方案3】:
您可以使用 checkedValue 绑定,并且可以将 observableArray 分配给 checked 绑定。
来自文档
如果你的绑定也包含checkedValue,这定义了checked绑定使用的值,而不是元素的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 fiddle。