ExtJS 5.1.0を使用する。Ext.util.TaskRunnerを使用してロードマスクにクロックを表示する
これを行う方法は他にはありませんが、Ajaxレスポンスを待っている間にロード・マスクに表示するタイマーが必要です。 success
で、マスクを解除してタイマーを破棄します。私の修正は、次の操作を行うことだったので、
コードは、Ext.util.TaskRunner
せずに正常に動作します:success
それはされてオン
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);
}
});
「ものをやって、」それは今タイマーを破壊されておらず、今ではではありませんTypeError: Ext.util.TaskRunner.destroy is not a function. (In 'Ext.util.TaskRunner.destroy(task)', 'Ext.util.TaskRunner.destroy' is undefined)
... TaskRunner
は、破壊されるか停止するまで実行を継続することがわかりますが、これは動作していないようです希望。
Ajaxコールのライフサイクル中にタスクを実行するには最終的に必要があり、私が必要とするものを達成するためにLoadMask
を複数回呼び出していることがわかります。
---- EDIT ----
は、部分的に、それを手に入れた:私は(私はinterval
パラメータを使用せずに、前repeat
パラメータを試していた、そしてそれがなかったrepeat
configパラメータがありませんでしたDoh!あなたは、この単純なユースケースをドキュメントの例として挙げたと思いますが、悲しいかな、...):
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
またはdestroy
をオブジェクトに発行する必要はありませんでした。
ただし、タスクは一度だけ実行されるため、時計は必要に応じて更新されません。それで、私はまだ立ち往生しているように見えます。
タイマーを破壊していないとはどういう意味ですか?どのようにそれを決定していますか?あなたは一度にたくさんのマスクを呼び出しますが、一度アンマスクすることは一度しかありません。問題を示すフィーリングを作ってください、ajax呼び出しは本当に関係ありません。 –
申し訳ありませんが、私は 'destroy'メソッドを使って得たエラーに関するいくつかの重要な情報を除外しました。 –