2011-03-21 34 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對象與您的商店中的每個記錄。我們可以使用單例實例嗎?我認爲你應該能夠增加這個想法並提出解決方案。