2012-06-04 4 views
1

Я даю обслуживание в приложение, которое делает несколько Ajax звонков с:Generic Loading Иконки в додзё

dojo.xhrPost() and dojo.xhrGet() 

и я хочу, чтобы добавить «значок + сообщение» общую нагрузки на все вызовы в системе .. зайдите в систему, я нахожу трудным и низким поддерживаемым, чтобы добавить загрузку функции вызова ко всей нагрузке: функция для всех xhr

поэтому я блуждаю, если есть способ добавить слушателя ко всем вызовам ajax в системе, поэтому каждый раз делается вызов показать загрузку ...

Я читал, что могу сделать это с аспектом в 1.7, но приложение, над которым я работаю, - это версия Dojo 1.6

, так что если вы знаете способ показать общее сообщение для всех вызовов ajax ...

Спасибо совет ..

ответ

6

Вы можете добиться этого с помощью dojo/topic, а именно IO Pipeline Topics, который работает с Dojo 1.4.

См работает пример в jsFiddle: http://jsfiddle.net/phusick/cMHdt/

Прежде всего, вы должны глобально включить IO Pipeline темы, установить ioPublish: true в одном из dojoConfig, data-dojo-config или djConfig (зависит от того, который вы используете).

Тогда dojo.subscribe() к конкретным темам, например:

dojo.subscribe("/dojo/io/start", function(e) { 
    dojo.style(throbberNode, "display", "block"); 
}); 

dojo.subscribe("/dojo/io/stop", function(e) { 
    dojo.style(throbberNode, "display", "none"); 
}); 

Доступные topics согласно Dojo документации являются:

  • /dojo/io/start отправляется, когда нет никаких нерешенных запросов ввода-вывода, и новый запрос ввода-вывода начал. Никакие аргументы не передаются с этой темой.
  • /dojo/io/send отправляется всякий раз, когда запускается новый запрос ввода-вывода. Он проходит додзё. Относится к запросу с темой.
  • /dojo/io/load отправляется при успешном загрузке запроса ввода-вывода. Он передает ответ и dojo.Deferred для запроса с темой.
  • /dojo/io/error отправляется всякий раз, когда запрос ввода-вывода ошибочен. Он передает ошибку и dojo.Deferred для запроса с темой.
  • /dojo/io/done отправляется всякий раз, когда запрос ввода-вывода завершен, либо путем загрузки, либо путем обнуления. Он передает ошибку и dojo.Deferred для запроса с темой.
  • /dojo/io/stop отправляется, когда все незавершенные запросы ввода-вывода завершены. Никакие аргументы не передаются с этой темой.
+0

+1 Хороший пример. :) – BOSS

0

Давайте думать о вас dojo.xhrGet() .Make общий метод, где вы можете передать свой адрес и вызов функции будет называться.

var processDialog = new dijit.Dialog({ 

     title : "" 
    }); //make it Global 
function sendRequest(requestUrl, sucessFunction, errorFunction) { 

     dojo.xhrGet({ 
     preventCache : "true", 
     url : requestUrl, 
     load : function(){ 
        showProgressDlg(processDialog,true); 
       sucessFunction; //Call showProgressDlg(processDialog,false) once your job done inside this call back method. 
        }, 
     error : function(){ 
        showProgressDlg(processDialog,false);//If Any loading image present 
        errorFunction; 
        }, 
     handleAs : "json" 
    }); 
} 



function showProgressDlg(imgContent /*Pass Your Icon URL*/, isShow) { 
    if (isShow == true) { 
     processDialog .attr("content", imgContent); 
     dojo.body().appendChild(processDialog .domNode); 
     processDialog.titleBar.style.display = 'none'; 
     processDialog.startup(); 
     processDialog.show(); 
    } else { 
     if (processDialog) 
      processDialog.hide(); 
    } 
} 
+1

спасибо, что это отличное решение, но мне нужно будет обновить все вызовы xhr, чтобы добавить вызов к этой функции и сеансу. Я не сделал код, который не был полностью знаком с ним. Поэтому я хочу избежать проверить все звонки, я согласен, что это так, как должно было быть сделано. Большое спасибо. – cesaregb

Смежные вопросы