我有一个可观察的数组,我需要从中删除一个项目并添加另一个。如果我只是调用.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 请求以加载新数据。因此,我不想触发不必要的通知。在我“完成”编辑数组之前,我不希望触发通知。