我正在 try catch 可观察数组更改的事件。
此 JSFiddle 中的完整示例
看完this question我了解 KO 不会捕捉成员值(value)观的变化。
我试图捕获的更改是 groups
数组对象中的 ready
标志。
使用传统的 KO 方式,我将定义一个计算如下
self.groups_status = ko.observableArray(
$.map(self.groups(), function(g) { return g.ready();}));
这将可观察对象绑定(bind)到每个对象的就绪标志。问题是 KO 不跟踪这些值。
所以我尝试了以下
self.groups_status = ko.observableArray(
$.grep(self.groups(), function(g) { return g.ready();}));
区别是现在我只保留就绪
对象。阵列正在改变。这也不起作用。
我需要能够注册到 self.groups_status
并执行命令。
P.S 我遇到了 this issue在 github 上,但我无法让它工作。
最佳答案
你试图从错误的方向解决这个问题。
您需要的是使用 ko.computed
而不是 ko.observableArray
。
然后您的 groups_status
计算将在 groups
数组更改或任何项目的 ready
属性更改时触发其更改事件:
self.groups_status = ko.computed( function () {
return $.grep(self.groups() , function(g) { return g.ready();})
});
演示 JSFiddle .
关于javascript - Knockout.js - 注册以更改 observableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19402539/