Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可观测阵列与计算误差_Javascript_Html_Knockout.js - Fatal编程技术网

Javascript 可观测阵列与计算误差

Javascript 可观测阵列与计算误差,javascript,html,knockout.js,Javascript,Html,Knockout.js,我有一个复选框列表,可以在选中和取消选中时执行函数。我还有一个可观察的数组,它保存当前处于活动状态的复选框的值,并将其放入本地存储。相关代码如下: this.layerToggleChecked = knockout.observableArray(); // ... this.layerToggle = function (source, name, type, url, description) { return knockout.computed({ read:

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

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);
}
复选框按计划工作,触发功能,直到我添加returnthis.layerToggleChecked;返回

knockout-3.2.0.js:13未捕获类型错误:b.push不是一个函数

Knockout的checked绑定处理数组的方式不同于其他值。您希望向计算的可观察对象写入true或false,但返回的是一个数组,这显然是不同的

发件人:

如果参数解析为数组,则需要特别考虑。在这种情况下,如果值与数组中的某个项匹配,KO将设置要检查的元素,如果该元素不包含在数组中,则设置为未选中

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

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

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

目前还不清楚是什么触发了这个错误。请使用工具栏上的按钮在堆栈中复制它。通过从一个函数返回一个计算出的可观察值(可能是在单击复选框时执行的),也不清楚您期望发生什么。