2013-03-25 13 views
14

私は緯度と経度のプロパティを持つUserモデルを持っています。これはマップ上の現在のユーザーの位置を示すために使用されます。Emberモデルの間隔を再読み込み

App.User = DS.Model.extend({ 
    firstName: DS.attr('string'), 
    lastName: DS.attr('string'), 
    email: DS.attr('string'), 
    jobs: DS.hasMany("App.Job"), 
    latitude: DS.attr('number'), 
    longitude: DS.attr('number'), 
    measuredAt: DS.attr('date'), 
}); 

指定された間隔ごとにサーバーから緯度と経度のプロパティを自動的に更新するにはどうすればよいですか? ember-dataはこの種のユースケースをサポートしていますか?私はこの機能を持つサンプルを見つけることができません。私はそれにsetIntervalでUserクラスのfindメソッドをオーバーライドする必要があると思う、これは正しいアプローチですか?

おかげ

答えて

8

今この質問に遭遇している人には、setIntervalを使用しないでください。重大なメモリリークを引き起こすことが示されています。

代わりにEmber自身のEmber.run.laterを使用してください。

も参照してください: `から来るsetInterval`ん:

+0

+1は、無制限のsetIntervalの代わりにEmberの実行ループを使用します。これは投票されるか、少なくとも選択された回答に組み込まれるべきです。 –

+0

答えをありがとう、私はこれを正しいと受け入れる。 – lazzi

+0

[ember run loop](http://guides.emberjs.com/v2.0.0/applications/run-loop/)を呼び出すために投票します。私は、実行ループを理解することは初心者ができることを学ぶ最も力強いものだと信じています –

5

モデルはあなたがsetIntervalコールバックで使用することができ、今.reload()方法があります。 https://stackoverflow.com/a/14183507/363073

P. #545をご覧ください。

+0

私が知っている骨董品ですか? – Abdull

+1

https://developer.mozilla.org/en-US/docs/JavaScript/Timers – dechov

9

編集:Dmitri Zagidulinの答えをご覧ください。

私はそれを理解しました。今のところ私が必要とするのはモデルのdidLoadメソッドをオーバーライドすることだけでしたが、将来はもっと複雑な解決策が必要になるでしょうが、これは今のところ十分です。

didLoad: function(){ 
    var self = this; 
    setInterval(function() {self.reload()}, 5*60*1000); //every 5 minutes 
} 

さらに多くのモデルをリロードする必要がある場合は、これをMixinとして実装するとよいでしょう。

関連する問題