如何取消对具有Knockout 3.0的可观察数组的更改?

bea*_*mes 7 knockout.js knockout-3.0

我对数组进行了更改.我正在使用Sanderson最新的数组订阅方法来捕获添加/删除更改.在这个订阅中,我打算捆绑并通过网络发送我的请求.如果请求因任何原因失败,我希望能够取消对集合的任何可能的更改.我已经验证了这个订阅在更改传播之前被点击了所以我假设有一种方法可以说"停止不做它"但是我无法弄清楚如何.

作为我的榜样......

self.SourceData = ko.observableArray(data);
self.SourceData.subscribe(function(changes) {
    var isAllGood = true;
    ko.utils.arrayForEach(changes, function(ch) {
        if (ch.value == doesNotMeetMyCondition) isAllGood = false;
    });
    if (!isAllGood) <STOP DON'T DO IT>
}, null, 'arrayChange');
Run Code Online (Sandbox Code Playgroud)

当检查'this'时,我确实看到ko.subscription对象具有标准[callback,dispose,disposeCallback,target],但似乎没有任何东西等于停止做不到.

任何想法都会很有帮助.谢谢.

RP *_*yer 4

目前没有办法阻止变革的进行。

您可以订阅该beforeChange事件并在更改之前缓存数组的副本。就像是:

self.SourceData.subscribe(function(value) {
    /store copy, in case it needs to be restored
    self.beforeSourceData = value && value.slice();
}, null, "beforeChange");
Run Code Online (Sandbox Code Playgroud)