2016-08-26 15 views
0

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をオブジェクトに発行する必要はありませんでした。

ただし、タスクは一度だけ実行されるため、時計は必要に応じて更新されません。それで、私はまだ立ち往生しているように見えます。

+0

タイマーを破壊していないとはどういう意味ですか?どのようにそれを決定していますか?あなたは一度にたくさんのマスクを呼び出しますが、一度アンマスクすることは一度しかありません。問題を示すフィーリングを作ってください、ajax呼び出しは本当に関係ありません。 –

+0

申し訳ありませんが、私は 'destroy'メソッドを使って得たエラーに関するいくつかの重要な情報を除外しました。 –

答えて

0

これが最終的に!

var task, runner = new Ext.util.TaskRunner(); 

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

    task.start(); 

をそして成功コールバックが起こったら、単純なtask.stop();がタスクを停止:ここ

が働いた構成です。欠落しているキーは、NewTask. Interestingと定義されているようです。 Senchaドキュメンテーションの例をもっと慎重に読むことをお勧めします。

関連する問題