2011-03-21 12 views
0

我有一个绑定到JsonStore(代理中的var agentDataStore)的GridPanel(var agentGrid代码)。该商店有一个显示计时器的字段,指示客户服务代理处于某个状态的时间。因此,我每15秒钟发一个事件(使用setInterval()),通过迭代JsonStore并更新相应的字段来更新每行上的计时器。迭代ExtJS 3.1使用大型数据源的GridPanel

所以,这里是获取每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

您一定可以利用Ext.util.TaskRunner类来进行更新。我能想到的一种避免“针对每个循环”的方法是将Ext.data.Record扩展为具有新事件并将TaskRunner的实例附加到每条记录,并且在每个时间间隔触发更新事件。所以,一个特定的记录被更新。

副作用将是你将有200个TaskRunner对象与您的商店中的每个记录。我们可以使用单例实例吗?我认为你应该能够增加这个想法并提出解决方案。