1

私はいくつかのAjax呼び出しを行うアプリケーションにメンテナンスを提供しています:

dojo.xhrPost() and  dojo.xhrGet()

そして、システム上のすべての呼び出しに一般的な読み込み「アイコン+メッセージ」を追加したいと思います。すべてのload:functionにloadingFunction呼び出しを追加するのは困難で、保守が難しいと感じたシステムを確認します。xhr

したがって、システム上のすべてのajax呼び出しにリスナーを追加して、呼び出しが行われるたびに読み込みを表示する方法があるかどうかをさまよいます...

1.7のアスペクトでそれができると読みましたが、私が取り組んでいるアプリケーションはDojoバージョンの1.6です。

したがって、すべてのajax呼び出しに対して一般的なメッセージを表示する方法を知っている場合は...

アドバイスありがとうございます。

4

2 に答える 2

6

dojo/topicこれは、Dojo1.4以降で機能するIOPipelineTopicsを介して実現できます。

jsFiddleの実例を参照してください:http://jsfiddle.net/phusick/cMHdt/

まず、IOパイプライントピックをグローバルに有効にする必要があります。これは、、、または(使用するものによって異なります)のいずれかに設定されioPublish: trueます。dojoConfigdata-dojo-configdjConfig

次に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");
});

topicsDojoのドキュメントに従って利用できるのは次のとおりです。

  • /dojo/io/start未処理のIO要求がなく、新しいIO要求が開始されたときに送信されます。このトピックでは引数は渡されません。
  • /dojo/io/send新しいIO要求が開始されるたびに送信されます。トピックを含むリクエストに対してdojo.Deferredを渡します。
  • /dojo/io/loadIO要求が正常にロードされるたびに送信されます。応答とdojoを渡します。トピックを含む要求に対して延期されます。
  • /dojo/io/errorIO要求がエラーになるたびに送信されます。エラーとdojoを渡します。トピックを含むリクエストに対して延期されます。
  • /dojo/io/doneロードまたはエラーのいずれかによって、IO要求が完了するたびに送信されます。エラーとdojoを渡します。トピックを含むリクエストに対して延期されます。
  • /dojo/io/stopすべての未処理のIO要求が終了したときに送信されます。このトピックでは引数は渡されません。
于 2012-06-05T09:57:20.800 に答える
0

あなたがいると考えてみましょうdojo.xhrGet()。UR1と呼び出される呼び出し関数を渡すことができる一般的なメソッドを作成します。

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();
    }
}
于 2012-06-05T08:19:48.930 に答える