防止knockout.js可观察数组中的重复项

时间:2013-07-10 19:14:18

标签: javascript knockout.js

我运行一个定时循环,它从服务器异步获取数据并更新一个可观察的数组。我认为这样可以防止重复,但似乎没有。如何防止添加重复项?

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

这总是返回true,因为在数组中不包含特定设备(虽然它显然是这样)。

1 个答案:

答案 0 :(得分: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;
}