2013-07-10 52 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; 
}