编程语言
首页 > 编程语言> > javascript-Knockout.js-注册以更改observableArray

javascript-Knockout.js-注册以更改observableArray

作者:互联网

我正在尝试捕获可观察数组更改的事件.

JSFiddle的完整示例

阅读this question之后,我了解到KO不能捕获成员值的变化.

我试图捕获的更改是groups数组的对象中的ready标志.
使用传统的KO方式,我将定义如下

self.groups_status = ko.observableArray(
   $.map(self.groups(), function(g) { return g.ready();}));

这将可观察对象绑定到每个对象的就绪标志.问题是KO无法跟踪值.

所以我尝试了以下

self.groups_status = ko.observableArray(
   $.grep(self.groups(), function(g) { return g.ready();}));

区别在于现在我只保留准备好的对象.数组在变化.这也不起作用.

我需要能够注册到self.groups_status并执行命令.

P.S我在github上遇到了this issue,但是我无法使其工作.

解决方法:

您正在尝试从错误的方向解决此问题.

您需要使用ko.computed而不是ko.observableArray.

然后,只要groups数组发生更改或项目的ready属性发生任何更改,您计算出的groups_status就会触发其change事件:

self.groups_status = ko.computed( function () {
    return $.grep(self.groups() , function(g) { return g.ready();})
});

演示JSFiddle.

标签:knockout-js,javascript
来源: https://codeday.me/bug/20191122/2061282.html