2014-07-10 68 views
3

Knockout的Observable Arrays可讓您「訂閱」陣列更改just like any other observable的更改。 「訂閱」回調函數接收一個參數,並且這是數組的值。下面是一個例子(fiddle):在Knockout可觀察數組訂閱函數中,您可以確定添加或刪除了哪些元素?

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); 

不過,我想知道,得到了添加到觀察的陣列哪些因素。有沒有辦法做到這一點?如果我可以將舊數組與新數組進行比較,那麼我可以確定添加或刪除了哪些項目。但是,似乎在調用「訂閱」函數回調時,沒有辦法訪問「前一個」數組值。在那兒?

回答

6

敲除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/

+0

正是我一直在尋找。謝謝! – Josh

+0

這是記錄在任何地方嗎?我似乎無法在任何地方找到在knockoutjs.com上提到的這個...? – Josh

+0

它只是在挖空發佈說明中提到https://github.com/knockout/knockout/releases – huocp

相關問題