arb*_*arb 19 javascript knockout.js
我有一个带有observableArray(名为"all")对象的视图模型.该对象的一个属性是observable选择的名称.我想要一些代码在数组中子对象的selected属性发生变化时执行.我尝试手动订阅allvia,all.subscribe()但该代码仅在添加或删除项目时触发.我更新了代码,就像这样:
all.subscribe(function () {
ko.utils.arrayForEach(all(), function (item) {
item.selected.subscribe(function () {
//code to fire when selected changes
});
});
});
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?还是有更好的方法?
Dom*_*nic 20
这接近正确.可观察数组订阅仅适用于添加或删除项目而不进行修改的情况.因此,如果您想订阅一个项目本身,您需要订阅该项目本身:
关键点:observableArray跟踪数组中的对象,而不是这些对象的状态
简单地将对象放入observableArray并不会使该对象的所有属性本身都可观察到.当然,如果您愿意,您可以观察这些属性,但这是一个独立的选择.observableArray只跟踪它所拥有的对象,并在添加或删除对象时通知侦听器.
我说"接近正确"因为您要删除所有旧订阅.目前,如果可观察数组在[a, b]您订阅时启动[a, b],但是如果c添加,则您有两个订阅a,b加上一个订阅c.