使用大数据源迭代ExtJS 3.1 GridPanel

时间:2011-03-21 18:51:15

标签: javascript extjs

我有一个绑定到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行不应该有那么多更新,但可能是它?

1 个答案:

答案 0 :(得分:0)

您肯定可以使用Ext.util.TaskRunner类进行更新。我可以想到避免“for each循环”的一种方法是扩展Ext.data.Record以获得一个新事件,并将TaskRunner的实例附加到每个记录,并在每个时间间隔触发更新事件。因此,更新特定记录。

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