繁体   English   中英

可观察的数组和计算的误差

[英]Observable array and computed error

我有一个复选框列表,这些复选框在选中和取消选中时执行功能。 我还有一个可观察的数组,其中包含当前处于活动状态(放入本地存储)的复选框的值。 相关代码在这里:

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不是一个函数

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

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

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

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

由于您使用数组保存检查值,因此最好直接绑定到该数组:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM