1

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

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

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

4

1 回答 1

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;
}
于 2013-07-10T19:25:01.730 回答