2013-03-25 58 views
14

我有一個用戶模型,它具有經度和緯度屬性,用於顯示當前用戶在地圖上的位置。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'), 
}); 

什麼是從服務器自動更新經度和緯度的屬性每一個給定的時間間隔最好方法是什麼?燼數據支持這種用例嗎?我找不到具有此功能的任何示例。我想我會需要重寫用set類的setInterval的User類的find方法,這是正確的方法嗎?

感謝

回答

8

對於那些現在遇到這個問題的人 - 不要使用setInterval,它已被證明會導致嚴重的內存泄漏。

改爲使用Ember自己的Ember.run.later

參見:

+0

+1使用Ember運行循環而不是willy nilly setInterval。這應該被投票或至少納入選定的答案。 – 2015-07-30 00:34:58

+0

感謝您的回答,我會接受這一個是正確的。 – lazzi 2015-07-30 10:39:08

+0

投票支持[ember run loop](http://guides.emberjs.com/v2.0.0/applications/run-loop/)。我相信理解跑步循環是初學者能夠學習的最有力的一點 – 2015-11-11 09:59:01

5

模型現在有一個.reload()方法,該方法你可以在setInterval回調使用。見https://stackoverflow.com/a/14183507/363073

P.S.手錶#545

+0

我珍玩知道:哪裏'setInterval'從何而來? – Abdull 2013-03-26 16:58:22

+1

https://developer.mozilla.org/en-US/docs/JavaScript/Timers – dechov 2013-03-26 17:07:10

9

編輯:請參閱德米特里Zagidulin的答案。

所以我想通了。目前我所需要的只是在模型上重寫didLoad方法,將來我可能需要更復雜的解決方案,但現在已經足夠了。

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

如果有人需要重新加載更多的模型,好的解決方案是將這個實現爲Mixin。