我有一个绑定到JsonStore的GridPanel(代码中的var agentGrid)(代码中的var agentDataStore)。该商店有一个字段,显示一个计时器,指示客户服务代理处于某个州的时间。因此,每隔15秒我会触发一个事件(使用setInterval()),通过迭代JsonStore并更新相应的字段来更新每行的计时器。
所以,这是每15秒触发一次的事件:
代码:
function agentTimerTick() {
var newTime = getStateTime(); //assume this always works
agentDataStore.each(function (rec) {
rec.set('statetimedisplay', newTime); //set the field of the JsonStore to the timer value
});
agentDataStore.commitChanges();
}
然而,一旦我在JsonStore中获得了大约120个代理,页面就会开始冻结,而firefox告诉我我的脚本编写时间太长。
所以,我的问题: 有没有更好的方法在GridPanel的每一行中实现一个计时器(绑定到JsonStore)?我意识到迭代不是一个有效的过程,但我怎么能更新每一行?请记住,我需要显示每个代理的状态时间。 我想,200行不应该有那么多更新,但可能是它?
答案 0 :(得分:0)
您肯定可以使用Ext.util.TaskRunner
类进行更新。我可以想到避免“for each循环”的一种方法是扩展Ext.data.Record
以获得一个新事件,并将TaskRunner的实例附加到每个记录,并在每个时间间隔触发更新事件。因此,更新特定记录。
副作用是您的商店中每个记录都有200个TaskRunner对象。我们可以使用单例实例吗?我认为你应该能够添加这个想法并提出解决方案。