私はExtJS 3.4.0を使用しています(この時点でv 4.0はオプションではありません)、Ajaxリクエストの結果に基づいてプログレスバーを更新しようとしています。しかし、JSは私の特権ではありません。URLからプログレスバーを更新するExtJS
私はdevフォーラムでサンプルを調べて、実際のステータスに基づいて更新以外のすべてを稼働させることができました。
私のajaxリクエスト/応答が行われていることを確認しました。しかし、1/1秒に1回ではなく、1回に1回発生します。コントローラ側でステータスが変化しています。
私が必要とするのは、進捗バーがステータスが変更された場合にのみステップバイステップに移動し、そうでない場合は現在のステップを保持しながらアクティブに留まることです。プログレスバーが開始されると、毎秒ステータス1のajaxリクエストが送信されます。
私はどこから外れてしまったのでしょうか?
*のorignalのExt例ここにありExt example
JSコードは、私はあなたの方法があまりにも洗練されたと思い
var mystatus="";
Ext.onReady(function(){
var pbar1 = new Ext.ProgressBar({
text:'Initializing...'
});
var count = 0;
mystatus=null;
var btn1 = Ext.get('btn1');
btn1.dom.disabled = false;
//setup request
Ext.Ajax.request({
url: './account/getStatus',
method:'GET',
success: function (result, request) {
mystatus =Ext.decode(result.responseText).status;
count =Ext.decode(result.responseText).steps;
},
failure: function (result, request) {
Ext.MessageBox.alert('Failed', result.responseText);
}
});
btn1.on('click', function(){
Ext.fly('p1text').update('Working');
if (!pbar1.rendered){
pbar1.render('p1');
}else{
pbar1.text = 'Initializing...';
pbar1.show();
}
Runner.run(pbar1, Ext.get('btn1'), count, function(){
pbar1.reset(true);
Ext.fly('p1text').update('Done.').show();
});
});
});
var Runner = function(){
var f = function(v, pbar, btn, count,cb){
return function(){
if(v > count){
btn.dom.disabled = false;
cb();
}else{
/// i think this is the block that is either wrong or in the wrong place
curStatus=mystatus.toString();
Ext.Ajax.request({
url: './account/getStatus',
method:'GET',
success: function (result, request) {
mystatus =Ext.decode(result.responseText).status;
},
failure: function (result, request) {
Ext.MessageBox.alert('Failed', result.responseText);
}
});
if (curStatus!=mystatus){
pbar.updateProgress(v/count,'Working on '+mystatus+ ' Step ' + v + ' of '+count+'...');
}
}
}
};
return {
run : function(pbar, btn, count, cb){
btn.dom.disabled = true;
var ms = 5000/count;
for(var i = 1; i < (count+2); i++){
setTimeout(f(i, pbar, btn, count, cb), i*ms);
}
}
}
}();
私はこれがそうかもしれないと思います。私はいくつかのテストを実行し、あなたに戻ってみましょう – stimpy
受け入れ。私はまだそれが働いていないが、あなたは正しい道に私を入れている。また、これは私が見た最も包括的な答えの一つです。ありがとう – stimpy
ランナー要求が失敗した場合、ループチェックが停止したようです。それを変更する方法に関するアイデアは200msごとに試してみますか? – stimpy