我有一个复选框列表,可以在check和uncheck上执行函数。我还有一个可观察的数组,它保存当前活动的复选框的值(放入本地存储)。相关代码在这里:
this.layerToggleChecked = knockout.observableArray();
// ...
this.layerToggle = function (source, name, type, url, description) {
return knockout.computed({
read: function () {
return this.layerToggleChecked();
},
write: function (checked) {
if (checked) {
alert("loading");
this.layerToggleChecked.push(source());
} else {
alert("removing");
this.layerToggleChecked.remove(source());
}
}
}, this);
}
复选框按计划触发功能,直到我添加return this.layerToggleChecked();
返回
knockout-3.2.0.js:13 Uncaught TypeError:b.push不是函数
答案 0 :(得分:0)
Knockout的checked
绑定处理数组与其他值不同。您期望将true
或false
写入计算的observable,但是您返回的数组显然不同。
来自http://knockoutjs.com/documentation/checked-binding.html:
如果您的参数解析为
array
,则会给予特别考虑。在这种情况下,如果值与数组中的项匹配,KO将设置要检查的元素,如果数组中没有包含,则取消选中。当用户选中或取消选中该复选框时,KO将相应地添加或删除数组中的值。
由于您使用数组来保存选中的值,因此最好直接绑定到它:
<input type="checkbox" data-bind="checkedValue: source, checked: layerToggleChecked" />