2013-07-30 8 views
3

У меня есть окно с множеством комбо с автозагрузкой по умолчанию = 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 yeah thank u. Мой код работает, но он не работает хорошо :) Я использую sra's код, и это хорошо – 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 
}); 
Смежные вопросы