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

标签 javascript knockout.js

我正在 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/

相关文章:

javascript - 在 Angular 中保持插入顺序

javascript - 自定义绑定(bind)无法从 Knockout 2.3 更新到 3.3

knockout.js - KnockoutJS 实时验证本地化

javascript - Chrome 中的 Gtranslate 模块 "Cannot read property ' G' 为未定义错误

javascript - 来自 Vue 组件数据的计算函数

javascript - 计算组在fabric js中的%位置

javascript - "The JSON request was too large to be deserialized"MVC KnockoutJs

javascript - ObservableArray 未绑定(bind)到 GUI

javascript - 默认情况下限制所有 observable 的速率

javascript - Node.js 完全是 javascript 吗?