可观察数组和计算错误

Observable array and computed error

本文关键字:计算 错误 数组 观察      更新时间:2023-09-26

我有一个复选框列表,在选中和取消选中时执行函数。我还有一个可观察数组,用于保存当前活动的复选框的值(放入本地存储中)。相关代码如下:

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 is not a function

Knockout的checked绑定处理数组的方式与其他值不同。您期望将truefalse写入计算的可观察对象,但是您返回的是一个数组,这显然是不相同的。

从http://knockoutjs.com/documentation/checked-binding.html

:

如果您的参数解析为array,则需要特别考虑

。在这种情况下,KO将设置元素,如果值与数组中的项匹配,则检查元素,如果不包含在数组中,则不检查元素。

当用户选中或取消选中复选框时,KO将相应地从数组中添加或删除值。

因为你使用一个数组来保存选中的值,你最好直接绑定到它:

<input type="checkbox" data-bind="checkedValue: source, checked: layerToggleChecked" />