2014-02-11 13 views
17

Ich habe eine Ember-Anwendung, deren Modell von einem Ajax-Aufruf stammt. Der erste Anruf funktioniert gut, ich habe den Modell-Hook der Ember.Route gibt ein Versprechen an den Ajax Aufruf zurück, der die Daten zur Anzeige bringt.Wie man das Ember-Modell regelmäßig aktualisiert (zB in setInterval)?

Aber diese Daten ändern sich häufig im Backend, und ich möchte die Webapp den Server periodisch abfragen, sagen wir, alle 5 Sekunden, und aktualisieren oder noch besser die Modelldaten komplett mit dem neu abgerufenen austauschen.

Was ist der geeignete Weg, dies mit Ember.js zu tun? Ich bin neu in Ember, also bin ich ein bisschen verloren damit.

Antwort

30

Ich denke, dies ist ein guter Anwendungsfall für Ember.run.later, die begrenzt die Häufigkeit von Funktionsaufrufen.

Sie könnten nur eine Aktualisierung zu Ihrem Modell, ähnlich wie diese hinzu:

App.Model = DS.Model.extend({ 
    poll: function() { 
     var _this = this; 
     Ember.run.later(function() { 
     _this.reload(); 
     _this.poll(); 
     }, 500); 
    }.observes('didLoad'), 
}); 
+0

Danke für die Antwort. In meinem Fall versuche ich herauszufinden, wie man diese Ajax-Aufrufe korrekt auslöst und das Modell regelmäßig mit Hilfe von Glut aktualisiert. Dies würde ich mit einem setInterval erreichen, wenn ich kein MVC-Framework wie Ember verwende. –

+0

Sicher, das funktioniert - siehe auch meine aktualisierte Antwort. – chopper

+1

Ohhh ich sehe was du meinst .. das ist super !! danke, ich wünschte, ich könnte deine Antwort als die richtige auch markieren, oder upvote mehrmals :) –

2

Wenn Sie keine Ember-Daten verwenden, können Sie einfach eine rekursive setTimeout oder setInterval in Ihrem Controller hinzufügen und die model-Eigenschaft festlegen. Hier ist ein simple example setting the model from a UI event.

Wenn Sie glut-Daten verwenden, denke ich, die folgenden Themen haben genauere Lösungen:

+0

, dass genau das, was ich brauchte, danke !! –

+3

Verwenden Sie nicht setInterval. Memory Leaks in Hülle und Fülle – jemiloii

+2

ein weiterer Grund, um setInterval zu vermeiden: Es verursacht asynchrone Nebenwirkungen in Ihren Integrationstests. Siehe http://discuss.emberjs.com/t/guide-asynchronous-side-effects-in-testing/2905 –

Verwandte Themen