在Knockout仍在更新订阅者时刷新UI

时间:2013-05-29 15:26:25

标签: javascript knockout.js knockout-2.0

我遇到了麻烦。我有一个大型视图模型,我的observableArrays拥有大量订阅者。当observable发生变化时,我希望在每个通知之间刷新用户界面,以便UI仍然负责,而淘汰赛仍在计算用户。

有没有办法实现这个目标?

谢谢!

1 个答案:

答案 0 :(得分:2)

要使用户界面更具响应性,请使用the "throttle" extender。这样,多个更改将作为单个UI更改重新评估。

对于不冻结的UI,您需要中断JavaScript进程。这样就可以更新UI。这样做的方式,在您的订阅者而不是立即处理延迟它:

model.value.subscribe(function(newValue){
   setTimeout(function(){
      doWork(newValue);
   }, 0);
});

如果你的doWork进行了许多计算,那将不可避免地冻结UI。为了避免UI冻结,您需要编写代码以便计算以切片完成,以便可以更新UI。 JavaScript调度程序将允许在两个间隔之间进行UI更新。例如,如果您正在处理数组,请处理chunks中的项目。