2013-03-25 19 views
14

Mam model użytkownika, który ma właściwości szerokości i długości geograficznej, które służą do wyświetlania bieżącej lokalizacji użytkownika na mapie.Ponowne ładowanie modelu Ember w przedziale

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'), 
}); 

Jaki jest najlepszy sposób automatycznego aktualizowania właściwości szerokości i długości geograficznej z serwera w podanym interwale? Czy ember-data wspiera ten rodzaj przypadków użycia? Nie mogę znaleźć żadnych próbek z tą funkcjonalnością. Myślę, że będę musiał nadpisać metodę find dla klasy User z setInterval w nim, czy to jest właściwe podejście?

Dzięki

Odpowiedz

8

Dla tych, którzy natrafiają teraz na to pytanie - nie używaj setInterval, wykazano, że powoduje poważne wycieki pamięci.

Zamiast tego użyj własnego adresu Ember: Ember.run.later.

Zobacz także:

+0

+1 za korzystanie z pętli Ember, a nie z zachłannym setInterval. To powinno zostać poddane pod głosowanie lub przynajmniej włączone do wybranej odpowiedzi. –

+0

Dzięki za odpowiedź, zaakceptuję to jako poprawne. – lazzi

+0

głosowanie za podniesienie [pętla embera] (http://guides.emberjs.com/v2.0.0/applications/run-loop/). Uważam, że zrozumienie pętli uruchamiania jest najbardziej wzmacniającą częścią nauki, jaką może zrobić początkujący –

9

EDYCJA: Zobacz odpowiedź Dmitri Zagidulin.

Więc wymyśliłem to. Na razie wszystko, czego potrzebowałem, to przesłonić metodę didLoad na modelu, w przyszłości prawdopodobnie będę potrzebował bardziej złożonego rozwiązania, ale na razie jest to wystarczające.

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

Jeśli ktoś potrzebuje przeładować więcej modeli, dobrym rozwiązaniem byłoby zaimplementowanie tego jako Mixin.

Powiązane problemy