2013-03-25 3 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'), 
}); 

Каков наилучший способ обновляться автоматически широты и долготы свойства от сервера каждый заданный интервал? Поддерживает ли ember-данные такой вариант использования? Я не могу найти образцы с этой функциональностью. Я думаю, мне нужно будет переопределить метод поиска для класса User с setInterval в нем, правильно ли это?

Благодаря

ответ

8

Для тех, кто сталкивается с этим вопросом сейчас - не используйте setInterval, было показано, что это вызывает серьезные утечки памяти.

Вместо этого используйте Ember's Ember.run.later.

Смотрите также:

+0

+1 для использования цикла запуска Ember вместо willy nilly setInterval. Это должно быть проголосовано или хотя бы включено в выбранный ответ. –

+0

Спасибо за ответ, я соглашусь с этим правильно. – lazzi

+0

голосует за восхождение [ember run loop] (http://guides.emberjs.com/v2.0.0/applications/run-loop/). Я считаю, что понимание цикла запуска - это самый умный бит обучения, который может сделать новичок –

5

Модель имеет .reload() метод сейчас, который вы могли бы использовать в setInterval обратного вызова. См. https://stackoverflow.com/a/14183507/363073

P.S. Смотреть #545.

+0

Я диковинки, чтобы знать: где 'setInterval' взялось? – Abdull

+1

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

9

EDIT: см. Ответ Дмитрия Загидулина.

Итак, я понял. Пока что мне нужно было переопределить метод didLoad на модели, в будущем мне, вероятно, понадобится более сложное решение, но на данный момент это достаточно.

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

Если кому-то нужно перезагрузить больше моделей, хорошим решением было бы реализовать это как Mixin.

Смежные вопросы