2016-09-02 1 views
1

私は入力としてIPを受け取り、そのコンピュータのエラーログを返すコンポーネントを構築しています。モデルとアダプタをセットアップしていますが、新しいメッセージがあるかどうかを確認するためにデータを数分おきにリロードしたいのです。私はrun.laterが実際に実行し、エラーや警告がどちらか現れなかっ見ることはありませんいくつかの理由についてEmberjsのX分ごとにモデル内のデータを再読み込み

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    init(){ 
    this.logMessages = this.get('store').query('log', {ip : this.attrs.ip.value}); 
    this._super(...arguments); 
    }, 

    didLoad: function(){ 
    var self = this; 
    Ember.run.later(function(){self.logMessages = self.get('store').query('log', {ip : self.attrs.ip.value}); console.log("reload");}, 3000); 
    } 
}); 

私のコンポーネントは、このようなものです。

答えて

1

別のライフサイクルフックを使用したいと考えています。私が知る限り、didLoadはありませんが、あなたの必要性に基づいてdidRender、willRender、またはdidInsertElementを使用することができます。また、破棄フックのいずれかを使用してタイマーを削除すると、コンポーネントが削除されたときにタイマーが実行されたままになります。ここでは、ライフサイクルのフックの概要である:

https://guides.emberjs.com/v2.6.0/components/the-component-lifecycle/

+0

[OK]をクリックすると、値を取得して値を取得する必要がありましたが、現在は機能しています。 didRenderに追加し、willDestroyにrun.cancelを追加しました。お返事ありがとうございます – Ant

2

私は強く、このため燃えさし並行性(http://ember-concurrency.com/)を使用することをお勧めします。 storeクエリを定期的に実行するタスクを設定し、ライフサイクルフックをember-concurrencyで処理できるようにすることができます。次のようなものがあります。

pollServerForChanges: task(function *() { 
    while (true) { 
    yield timeout(2000); // wait 2 seconds 
    this.get('store').query(...) 
    } 
}).on('activate').cancelOn('deactivate').restartable(), 
+0

あなたの答えが良いかもしれませんが、私はプロジェクトを出荷し、少なくとも今のところそれを再訪する予定はありません。また、プロジェクトで1〜2回しか使用できない関数用のライブラリにライブラリを含めるというアイデアが気に入っていません。 – Ant

関連する問題