我是淘汰赛的新手,我在让复选框做我想做的事情时遇到了一些麻烦。首先,这是我迄今为止尝试过的小提琴:http://jsfiddle.net/imagitron/mMc6k/,还有令人讨厌的代码行:
<input type="checkbox" data-bind="checked: $root.selectedItems"/>
基本上,我要做的是通过复选框链接两个数组,这样当我单击复选框时,它会存储定义数组中的对象并将其保存到selectedItems数组。当我按下按钮时,removeItems函数也没有清除数组。
先谢谢!
答案 0 :(得分:3)
据我所知,淘汰赛不支持开箱即用。 checked
绑定将单个复选框的状态绑定到单个布尔属性。但是,要以两种方式工作,您需要指定函数名称而不是函数调用($root.someProperty
而不是$root.someProperty()
)。
value
绑定对复选框没有意义。它用于绑定其他输入字段的值,例如文本框。
为了达到你想要的效果,你可以为每个复选框定义一个带有对象的数组,如下所示:
var items = ko.mapping.fromJS([
{ label: 'Foo', checked: false },
{ label: 'Bar', checked: false }
]);
并像这样绑定它:
<!-- ko foreach: items -->
<input type="checkbox" data-bind="checked: checked"/>
<span data-bind="text: label"/>
<!-- /ko -->
然后使用ko.computed
函数检索数组的已检查值:
var checkedItems = ko.computed(function() {
return _.filter(items, function (item) { return item.checked() });
});
(这是下划线库的隐藏广告 - 如果你没有它,那么就我记得,淘汰赛也有类似的功能)