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');

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

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

解决方法

目前没有办法阻止变革通过.

您可以订阅beforeChange事件并在更改之前缓存阵列的副本.就像是:

self.sourceData.subscribe(function(value) {
    /store copy,in case it needs to be restored
    self.beforeSourceData = value && value.slice();
},"beforeChange");

相关文章

什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据...
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:...
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面