我构建了一个具有用户界面的系统,每次修改都必须向服务器(应用了业务逻辑的服务器)发送一个Ajax请求,并发送回一组新的UI值。此过程不会锁定UI,因此您可以“链接”更改并一次执行多个Ajax请求。
我正在使用淘汰赛,显然想防止此处进行递归更新,所以我要做的是:
我注意到的是,此循环第一次发生时(setFeatures,getFeatures),每个可观察到的敲除会触发另一个setFeatures(此操作在此处停止且不会递归)。
在此初始运行之后的任何时间点,其行为均符合预期。共享大量代码非常困难,但是我认为这样做的原因可能是由于以下原因:
skipUpdate = true;
// Update each of the knockout fields
$(data).each(function () {
var block = viewModel[this.Block];
var item = block[this.Name]
item.control.value(this.Value); // item.control.value is the observable
});
skipUpdate = false;
由于JavaScript是单线程的,我假设在执行此代码块之后更新可剔除的可观察对象是否正确?还是应该在skipUpdate标志内对其进行更新?
通常,已更改的可观察对象会立即通知其订户,以便所有计算的可观察对象或依赖于该可观察对象的绑定都将同步更新。
为了避免此类更新并异步进行更新,您可以使用rate-limiting observable notifications
基因敲除JS 3.1的新功能,在此之前有一个名为的东西throttle extender
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句