可观察数组和计算错误

时间:2015-10-02 10:06:05

标签: javascript html knockout.js

我有一个复选框列表,可以在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不是函数

1 个答案:

答案 0 :(得分:0)

Knockout的checked绑定处理数组与其他值不同。您期望将truefalse写入计算的observable,但是您返回的数组显然不同。

来自http://knockoutjs.com/documentation/checked-binding.html

  

如果您的参数解析为array,则会给予特别考虑。在这种情况下,如果值与数组中的项匹配,KO将设置要检查的元素,如果数组中没有包含,则取消选中。

     

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

由于您使用数组来保存选中的值,因此最好直接绑定到它:

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