0

ExtJS 5.1.0 を使用します。

これを行う他の方法は本当に考えられませんでしたが、Ajax 応答を待っている間にロード マスクに表示するタイマーが必要です。で、マスクの設定を解除し、タイマーsuccessを破棄します。

コードは なしで正常に動作するExt.util.TaskRunnerので、私の変更は次のようにすることでした:

    task = runner.start({
        run:  function () {
            // show loadMask during request
            Ext.getBody().mask("Computing..." + Ext.Date.format(new Date(), 'g:i:s A'));
        },
        interval: 10
    });

    // payload for POST
    obj = {
        query: {
            payload: atom
        }
    };

    Ext.Ajax.request({
        cors: true,
        timeout: 600000, //default is 30 seconds
        useDefaultXhrHeader: false,
        url: url,
        jsonData: obj,
        headers: {
            'Accept': 'application/json'
        },
        disableCaching: false,

        success: function(response) {
             // do stuff

             // stop loadMask
             Ext.getBody().unmask();
             Ext.util.TaskRunner.destroy(task);
        }
    });

そのsuccess上で「何かをしている」が、タイマーを破壊しておらず、マスクを削除していない(次のエラーが発生しているため、これは確認されている:TypeError: Ext.util.TaskRunner.destroy is not a function. (In 'Ext.util.TaskRunner.destroy(task)', 'Ext.util.TaskRunner.destroy' is undefined)...

TaskRunnerwill が破棄されるか停止されるまで実行し続けることは 認識していますが、これは期待どおりに機能していないようです。

LoadMask最終的には Ajax 呼び出しのライフサイクル中にタスクを実行する必要があり、必要なことを達成するために何度も呼び出していることに気付きました。

- - 編集 - -

部分的に理解しました:構成パラメーターがありませんでした (パラメーターを使用せずに以前にパラメーターrepeatを試したことがありますが、機能しませんでしたが、これらの組み合わせはまさにこれを機能させるために必要なものでした。ドキュメントの例としてこの単純な使用例を示したと思いますが、残念ながら...):repeatinterval

task = runner.start({
        run:  function () {
            // show loadMask during request
            Ext.getBody().mask("Computing..." + Ext.Date.format(new Date(), 'g:i:s A'));
        },
        interval: 10,
        repeat: 1
    });

これで、オブジェクトに対してstoporを発行する必要がなくなりました。destroy

ただし、タスクは 1 回しか実行されないため、クロックは必要に応じて更新されません。だから、私はまだ立ち往生しているようです。

4

1 に答える 1