Warten für die Modelle zu laden, bevor Sie rendering-app in Ember.js
Ich habe eine Reihe von verschiedenen application-level-Modellen — also, Aktueller Benutzer, Aktueller Konto, etc. — das will ich laden vor dem Rendern meiner Anwendung. Wie und wo sollte das geschehen? Diese Frage/Antwort viel geholfen, aber es doesn ' T decken den asynchronen Aspekt.
Folgende code leistet, was ich will, aber das laden der Modelle in beforeModel
(nutzen es zu warten auf die Verheißung zu beheben) scheint nicht richtig. Sollte ich auch geladen werden diese Modelle in ApplicationRoute
?
App.ApplicationController = Ember.Controller.extend({
currentAccount: null
});
App.ApplicationRoute = Ember.Route.extend({
beforeModel: function () {
var self = this;
return App.Account.find(...).then(function (account) {
self.controllerFor('application').set('currentAccount', account);
});
}
});
Vielen Dank für Ihre Hilfe!
InformationsquelleAutor Justin Stayton | 2013-08-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der trick ist, um zurückzukehren ein Versprechen aus dem route-Modell-Methode.
Dadurch wird der router für den übergang in die App.LoadingRoute route, bis das Versprechen aufgelöst wird, (die verwendet werden kann für die be-Angabe bars/Räder etc.)
Wenn das Versprechen aufgelöst wird, ist das App.LoadingRoute deaktiviert werden, und die ursprüngliche route ist setupController-Methode aufgerufen werden.
Dies funktioniert mit ember-data verspricht, JQuery $.ajax verspricht und ember-Modell fetch verspricht.
Nur stellen Sie sicher, dass Sie das aktuelle Modell, nach lösen der Verheißung.
Dies kann auch ein guter Ort, um Fehler zu behandeln, wenn das Versprechen ist abgelehnt - aber ich werde verlassen, dass auch eine andere Frage stellen.
Als für die wo laden Sie Ihre Modelle, die abhängig von der app-Nutzung.
In der Regel würden Sie ein Modell laden und die URL-Adresse anzeigt, müssen Sie auf dieses Modell eine Faustregel wäre die Angabe der Modell-ID in der URL.
Dies ist natürlich ändert, wenn Sie brauchen, um prefetch-Daten.
Und nun einige code:
Hoffe, das hilft.
wenn Sie Sie brauchen, im Voraus, können Sie mit der Glut.Anwendung der init-Methode
Ich kann nicht scheinen zu finden, ein Hinweis darauf, dass es wartet für ein Versprechen zu lösen. Können Sie genauer erklären? Danke.
Wenn Sie wieder ein Versprechen aus der Modell-Methode, eine route, die der router vorübergehend übergang in LoadingRoute (Sie sollten einen schönen LoadingRoute mit einer Spinnerei-laden Rad oder sowas), bis das Versprechen aufgelöst wird. Wenn das Versprechen aufgelöst wird, es wird gehen Sie zurück zu Ihrer route und führen die setupController als erwartet. ein Beispiel finden Sie hier: jsbin.com/axarop/47/edit und einige Referenz hier: gist.github.com/machty/5723945
InformationsquelleAutor Meori Oransky
Du willst zum laden, Daten/- Modelle, die zum initialisieren der Anwendung und fühlen beforeModel ist falsch?
Klingt wie Sie brauchen eine Anwendung Initialisierer!
Dein Freund in diesem Fall:
App.deferReadiness(); //halt den Fortschritt der Anwendung, bis alle Instanzen dieser Aufforderung (sprich: mehrere Initialisierungen) abgestimmt sind durch eine Instanz der folgende Aufruf:
App.advanceReadiness(); //prüfen, dies entspricht einem Versprechen lösen nennen.
1) Von Ihnen suchen, bis der Benutzer direkt geändert wird, wo die genannten nach Ihren app-setup:
2) Durch meta-tag:
3), die Durch die Session-Daten:
InformationsquelleAutor greg.arnott
Mir gelungen, diese Arbeit mit verschachtelten Verspricht und die afterModel Methode in der ApplicationRoute.
Funktioniert einfach perfekt 🙂 Die Anwendung bleibt in der LoadingRoute, bis alle Datensätze geladen sind.
Beachten Sie, dass ich bin mit Ember Modell, aber das sollte keinen Unterschied machen, es müssen nur zurück ein Versprechen.
InformationsquelleAutor Alex