D'attente pour les modèles à chargement avant le rendu en application Ember.js
J'ai un certain nombre de différentes au niveau de l'application des modèles — à-d., l'utilisateur actuel, compte courant, etc. — que je veux charger avant de rendre mon application. Où et comment faut-il procéder? Cette question/réponse beaucoup aidé, mais il ne couvre pas l'aspect asynchrone.
Le code suivant ce que je veux, mais le chargement des modèles en beforeModel
(pour profiter de l'attente pour la promesse de résolution) ne semble pas juste. Même si je dois être le chargement de ces modèles dans 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);
});
}
});
Merci pour votre aide!
OriginalL'auteur Justin Stayton | 2013-08-07
Vous devez vous connecter pour publier un commentaire.
L'astuce est de retour d'une promesse de la route que le modèle de la méthode.
Cela va entraîner le routeur à la transition de l'Application.LoadingRoute route, jusqu'à ce que la promesse est résolu (qui peut être utilisé pour le chargement indication bars/roues etc.)
Lorsque la promesse est résolu, l'Application.LoadingRoute sera désactivée, et l'original de l'itinéraire setupController méthode sera appelée.
Cela fonctionne pour ember-data promesses, JQuery $.ajax promesses et de braise-modèle de l'extraction de promesses.
Juste assurez-vous de retourner le modèle actuel après la résolution de la promesse.
Cela peut également être un bon endroit pour gérer les erreurs si la promesse est rejeté - mais je vais laisser ça à une autre question.
Que pour savoir où vous devez charger vos modèles - qui dépend de votre application utilisation.
Habituellement, vous devez charger un modèle où l'URL indique que vous avez besoin de ce modèle, une règle de pouce serait l'indication d'un modèle d'ID dans l'URL.
Bien sûr, cela change si vous avez besoin pour extraire des données.
Et maintenant un peu de code:
Espère que cette aide.
si vous en avez besoin à l'avance, vous pouvez utiliser la Braise.Application de la méthode init
Je n'arrive pas à trouver une quelconque indication qu'il attend une promesse à résoudre. Pouvez-vous expliquer plus en détail? Merci.
Lorsque vous revenez d'une promesse de la méthode de modèle d'un itinéraire, le routeur temporairement la transition vers LoadingRoute (vous devez définir un joli LoadingRoute un coup de chargement roue ou quelque chose comme ça), jusqu'à ce que la promesse est résolu. Lorsque la promesse est résolu, il va revenir à votre itinéraire et exécuter le setupController comme prévu. vous pouvez trouver un exemple ici: jsbin.com/axarop/47/edit et certains de référence ici: gist.github.com/machty/5723945
OriginalL'auteur Meori Oransky
Vous voulez de précharger des données/modèles pour initialiser votre application, et de se sentir beforeModel est incorrect?
Sonne comme vous avez besoin d'une application initialiseur!
Votre ami dans cette instance:
App.deferReadiness(); //arrêter le progrès de l'application jusqu'à ce que toutes les instances de cet appel (ie: plusieurs initialiseurs) sont compensées par une instance l'appel suivant:
App.advanceReadiness(); //considérons que c'est l'équivalent d'une promesse de résoudre appel.
1) De vous regardant directement l'utilisateur, la modification d'où mentionnés à adapter à votre configuration de l'application:
2) Par l'intermédiaire de la balise meta:
3) à Travers les données de Session:
OriginalL'auteur greg.arnott
J'ai réussi à obtenir ce travail en utilisant des Promesses et de l'afterModel méthode dans le ApplicationRoute.
Fonctionne parfaitement 🙂 La demande reste dans le LoadingRoute jusqu'à ce que tous les enregistrements sont chargés.
Notez que je suis en utilisant Braise Modèle, mais cela ne devrait pas faire de différence, il suffit de le retourner une Promesse.
OriginalL'auteur Alex