2013-07-10 57 views
1

我運行一個定時循環,它從服務器異步獲取數據並更新可觀察數組。我認爲這會阻止dups,但它似乎並不如此。我怎樣才能防止添加重複?防止knockout.js可觀察數組中的重複項

// Operations 
self.addDevice = function (device) { 
    if (device != null && ko.utils.arrayIndexOf(self.devices, device) < 0) { 
     self.devices.push(device); 
    } 
} 

這總是返回true,因爲在數組中不包含特定的設備(儘管它很明顯)。

+1

使用'ko.utils.arrayFirst'和傳遞功能進行比較的品種'通過value'。見[這裏](http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html)。 –

回答

3

您獲得的更新可能與您在數組中具有的所有對象具有相同的值,但它們可能是不同的對象,因此簡單的相等性檢查將返回false。您必須通過比較對象內的屬性來提供回調來自己測試平等。

例如,如果a = {prop: 5}b = {prop: 5},則a == b返回false。你需要在一個函數傳遞到ko.utils.arrayFirstko.utils.arrayFilter

var newItem = new Item(); 

ko.utils.arrayFirst(self.items(), function(existingItem, newItem) { 
    return existingItem.prop == newItem.prop; 
}