2016-08-30 8 views
0

私はEmberにとってとても新しいので、私はこれで完全に困惑しています。実行は後で動作するように見えますが、ステータスを更新するために5秒に1回しか実行されないという事実を無視しているようですが、実際にはgetServersメソッドを呼び出し続けてすぐにそれ自体を呼び出す(startWatchingStatus)再び。このコードのために、ページは決して実際にレンダリングされません。私はこのコードで何かを間違ってやっている必要があります。Emberはあとでcoffeescriptで正しく動作しません。

App.ServersController = Ember.ArrayController.extend(

    startWatchingStatus:() -> 
     controller = @ 
     controller.getServers() 
     Ember.run.later(controller,() -> 
     controller.startWatchingStatus() 
     , 5000) 

    getServers:() -> 
     App.ServerObject.getServers().done((data) -> 
      controller.set('content', data) 
      ) 

    init:() -> 
     @_super() 
     controller = @ 
     controller.startWatchingStatus() 

答えて

0

あなたはEmber.run.laterの使用法を誤って解釈され、それはあなたのためにそれを繰り返し続けるなくなり、5000msを待ってから、あなたの方法を実行します。そのため、あなたは可能性のいずれかの鎖のようなEmber.run.laterへの呼び出し(申し訳ありませんが、coffescript知らないが、あなたのアイデアを得るでしょう):

var callback =() => { 
    this.getServers(); 
    Ember.run.later(this, callback, 5000); 
}; 

Ember.run.later(controller, callback, 5000); 

それとも、簡単なwindow.setIntervalで行くと、実行ループ内でそれを包むことができ内部。

window.setInterval(() => { 
    Ember.run(() => { 
    controller.getServers(); 
    }); 
}, 5000); 

後で上の間隔をキャンセルする必要があるが、それはあなたが好むどの1あなた次第です場合は、2番目の1が容易かもしれません。

+0

私はあなたの提案を試みますが、getServers()を実行してから5秒間待ってから、自分自身(startWatchingStatus)を再度呼び出す必要があるため、私のコードはメソッドを繰り返さなければなりません。 – collusionbdbh

+0

ああ、間違った部分。私のコードは 'startWatchingStatus'に入れ、毎回' getServers'を呼び出す必要があります。サンプルを更新します。 –

+0

あなたの最初の選択肢は、私が離れてcoffeescriptで書かれているものと同じものです。私はそれが私が渡している機能を使って問題を引き起こしているコーヒースクリプトだと思っています。 – collusionbdbh

関連する問題