我运行一个定时循环,它从服务器异步获取数据并更新一个可观察的数组。我认为这样可以防止重复,但似乎没有。如何防止添加重复项?
// Operations
self.addDevice = function (device) {
if (device != null && ko.utils.arrayIndexOf(self.devices, device) < 0) {
self.devices.push(device);
}
}
这总是返回true,因为在数组中不包含特定设备(虽然它显然是这样)。
答案 0 :(得分:3)
您获得的更新可能与数组中的对象具有完全相同的值,但它们可能是不同的对象,因此简单的相等检查将返回false。您必须通过比较对象中的属性来提供回调来自己测试相等性。
例如,如果a = {prop: 5}
和b = {prop: 5}
,则a == b
返回false。您需要将函数传递给ko.utils.arrayFirst
或ko.utils.arrayFilter
,如
var newItem = new Item();
ko.utils.arrayFirst(self.items(), function(existingItem, newItem) {
return existingItem.prop == newItem.prop;
}