ExtJS 3.4.0(v 4.0は現時点ではオプションではありません)を使用しており、Ajaxリクエストの結果に基づいてプログレスバーを更新しようとしています。しかし、JSは私の得意ではありません。
私は開発フォーラムでサンプルを調べ、実際のステータスに基づいた更新を除いてすべてを機能させることができました。
ajaxリクエスト/レスポンスが発生していることを確認しました。ただし、1/2秒ごとに1回ではなく、ステップごとに1回だけ発生します。コントローラ側でステータスが変化しています。
基本的に私が必要としているのは、ステータスが変更された場合にのみプログレスバーがステップからステップに移動し、それ以外の場合はアクティブのままで現在のステップを保持することです。プログレスバーが開始されると、ステータス1/秒のajaxリクエストを送信する必要があります。
誰かが私が軌道から外れた場所を見ることができますか?
*ここにある元のExtの例Extの例
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);
}
}
}
}();