2013-03-25 60 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。