2012-02-03 2 views
2

В моем приложении мне нужно выполнить несколько запросов ajax одновременно, но каждый запрос занимает различное время в зависимости от размера ответа. Для того, чтобы избежать дальнейших операций во время AJAX запроса, я хотел бы использовать Ext.LoadMask в каждом АЯКС вызова, например:ExtJS loadMask: управлять несколькими loadMask в вызовах с несколькими аяксами

for(var i=0; i<ajaxCount; i++) { 
    var loadMask = new Ext.LoadMask(Ext.getBody(), {msg:"Loading " + ajaxName[i]}); 
    Ext.Ajax.request({ 
     success: function() { 
      loadMask.hide(); 
     }, 
     failure: function() { 
      loadMask.hide(); 
     } 
    } 
} 

однако, я обнаружил, что скрывать() скроет все loadMaskes в память. То, что я хочу сделать, - это скрыть только тот, что содержится в этом ajax-запросе, так что всегда есть маска до конца всех запросов.

Есть ли другой способ реализации этого?

спасибо!

ответ

6

Почему бы не использовать одну ту же маску для всех запросов и удалить ее, как только будут возвращены все запросы?

var requestCounter = 0; 
function hideMask(){ 
    if (requestCounter > 1){ 
     requestCounter--; 
    } else { 
     loadMask.hide(); 
    } 
} 
if (ajaxCount > 0){ 
    var loadMask = new Ext.LoadMask(Ext.getBody(), {msg:"Loading"}); 
} 

for(var i=0; i<ajaxCount; i++) {  
    requestCounter++; 
    Ext.Ajax.request({ 
     success: hideMask, 
     failure: hideMask 
    } 
} 
+0

хорошая идея. только в hideMask() необходимо выполнить небольшое изменение: добавьте проверку, запрашивает ли requestCouter === 0, если это скроется. в вашей функции, хотя requestCounter-- и значение становится 0, он не скроет ... – Simon

+0

@Simon Хороший улов. Вы также можете изменить условие (> 1);) – Li0liQ