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