在Knockout可观察数组订阅函数中,您可以确定添加或删除了哪些元素吗?

时间:2014-07-10 01:10:58

标签: javascript arrays knockout.js

淘汰赛Observable Arrays让你有能力订阅"更改数组just like any other observable。 "订阅"回调函数接收一个参数,它是数组的 new 值。这是一个示例(和fiddle):

var oa = ko.observableArray(['some','initial','data']);

oa.subscribe(function(newValue){
    console.log("Array was updated! Now it's:");
    console.log(newValue);
    // But which item was added?
});

oa.push("more data!");
setTimeout(function(){
    oa.remove("some");
},1500);

但是,我想知道哪些元素被添加到observable数组中。有没有办法做到这一点?如果我可以将旧数组与新数组进行比较,那么我可以确定添加或删除了哪些项目。但似乎在"订阅"调用函数回调,没有办法访问" previous"数组值。在那儿?

1 个答案:

答案 0 :(得分:6)

knockout observableArray提供事件arrayChange

oa.subscribe(function(changes){
    ko.utils.arrayForEach(changes, function(c) {
        console.log(c.status + " value:\"" + c.value + "\" at index:" + c.index);
    });
}, null, 'arrayChange');

http://jsfiddle.net/huocp/Vf8RK/3/