1

我有一个可观察的数组,我需要从中删除一个项目并添加另一个。如果我只是调用.remove(myItem)observable 数组,然后将我的新项目推送到它上面,Knockout 将为该数组触发两个更改通知,但在这种情况下,我宁愿将其视为单个更改,只触发一个通知。

我所做的是取出底层数组并将其保存在一个临时变量中,然后我对该临时变量进行修改,当我完成后,我将整个东西放回可观察数组中. 像这样的东西(从我实际做的有点简化):

vm.MyArray = ko.observableArray(["foo", "bar"]);

// Later when I need to alter the observable array, I do something like this    
var temp = vm.MyArray();
temp.splice(0, 1);
temp.push("some");
vm.MyArray(temp);

虽然这实现了我的目标,但感觉不是正确的做法。

有没有更合适的方法来对可观察数组进行多次更改,但只触发一个通知?

更新:

我不想触发两个通知的原因是因为我订阅了数组上的更改,并在新数据发生更改时发出 AJAX 请求以加载新数据。因此,我不想触发不必要的通知。在我“完成”编辑数组之前,我不希望触发通知。

4

1 回答 1

2

要实现这种行为,您应该使用展开的可观察数组,然后调用valueHasMutated方法:

vm.MyArray = ko.observableArray(["foo", "bar"]);
vm.MyArray().remove(myItem);
vm.MyArray().push(newItem);
vm.MyArray.valueHasMutated();
于 2013-03-05T15:10:22.070 回答