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)
...
TaskRunner
will が破棄されるか停止されるまで実行し続けることは 認識していますが、これは期待どおりに機能していないようです。
LoadMask
最終的には Ajax 呼び出しのライフサイクル中にタスクを実行する必要があり、必要なことを達成するために何度も呼び出していることに気付きました。
- - 編集 - -
部分的に理解しました:構成パラメーターがありませんでした (パラメーターを使用せずに以前にパラメーターrepeat
を試したことがありますが、機能しませんでしたが、これらの組み合わせはまさにこれを機能させるために必要なものでした。ドキュメントの例としてこの単純な使用例を示したと思いますが、残念ながら...):repeat
interval
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
});
これで、オブジェクトに対してstop
orを発行する必要がなくなりました。destroy
ただし、タスクは 1 回しか実行されないため、クロックは必要に応じて更新されません。だから、私はまだ立ち往生しているようです。