2013-07-30 41 views
3

我有一個窗口包括許多組合與默認autoload = false。我想等我的窗口中的所有組合被加載後,我將展示窗前,彷彿Extjs 4.1 - 如何等待所有商店組合加載

var arrCombos = window.query('combo'); 
    Ext.each(arrCombos, function(combo){ 
    combo.getStore().load(); // load 
    }); 

    WaitForFunction(arrCombos); // wait for loading done 

    window.show(); // show my window 

這裏是我的WaitForFunction

function WaitForFunction(arrCombos) { 
    var all = 1; 
    Ext.each(arrCombos, function(combo){ 
     if (combo.store.isLoading()) { 
      all = 0; 
     } 
    }); 
    if (all == 0){ 
     setTimeout(WaitForFunction(arrCombos), 100); 
    } 
} 

但是失敗了,那說too much recursion 我如何能做到這一點感謝。

+2

'的setTimeout(WaitForFunction(arrCombos),100)'是'呼籲立即WaitForFunction'和返回值傳遞給'setTimeout'。你的意思是:'setTimeout(function(){WaitForFunction(arrCombos)},100)'。我認爲你的代碼會以這種方式工作......但是sra基於事件和計數器的方法更好,因爲它不會等待任何不必要的ms。 – rixo

+0

@rixo是啊謝謝你。我的代碼運行,但它運行不好:)我使用sra的代碼,它很好 – freestyle

回答

2

快速和骯髒的,但這樣的事情應該工作:

var arrCombos = window.query('combo'), 
    storeCt = 0; 

function checkState() { 
    if(--storeCt == 0) 
    window.show(); 
} 

Ext.each(arrCombos, function (combo) { 
    var store = combo.getStore(); 
    storeCt++; 
    store.on('load', checkState, this, {single: true}) 
    store.load(); // load 
});