Comment prévenir la colonne vertébrale.Marionnettes du rendu d'une vue si c'est le modèle n'a pas été récupérée?
Dans ma colonne vertébrale.Marionnette de l'application j'ai un Modèle qui nécessite un attribut Id pour la construction de l'url. J'ai donc créer le modèle en lui passant un Id, l'ajouter à vue, puis extraire le modèle:
model = new Model({_id:id})
view = new View({model:model})
app.content.show(view)
model.fetch()
Je m'attends à la vue de ne commencer le rendu une fois que le modèle a été récupéré, mais la Marionnette rend le modèle immédiatement la cause de mes modèle de rendu à l'échec comme les attributs attendus n'existent pas. Aucune solution de contournement?
Je suis en train de faire quelque chose de similaire à la accepté de réponse ici:
La liaison d'une épine Dorsale de Modèle à une Marionnette ItemView de blocage .fetch()?
Mais tout qui fonctionne avec la colonne vertébrale, comme indiqué dans la réponse, de Marionnettes rend automatiquement la vue.
Voir aussi:
Épine dorsale de la Marionnette de l'Affichage avant de chercher complète
- Ne serait-il pas plus facile, au lieu de retarder le
app.content.show()
jusqu'après le fetch? Qui serait à toutes fins retarder le rendu de la vue jusqu'le modèle est récupéré. - Si, au contraire, vous souhaitez montrer une sorte de message de chargement, jetez un oeil à github.com/marionettejs/backbone.marionette/wiki/...
Vous devez vous connecter pour publier un commentaire.
Si vous voulez vraiment éviter de rendu jusqu'à ce que le modèle a été téléchargée, vous devez modifier l'ordre de vos appels, comme ceci:
Sinon, vous devriez penser à rendu immédiatement et de prendre avantage de la Marionnette de la vierge de soutien de l'état.
Les deux réponses ci-dessus.
Voici encore une autre façon que je préfère utiliser (se sent plus backboney).
Lier la vue directement sur le modèle
Lorsque le modèle est fait récupérée, la fonction que vous spécifiez s'exécuter.
Cela peut être fait avec des modèles ou collections.
Cela vous permet également de récupérer quand vous le souhaitez.
.show()
appels.render()
sur le point de vue que son passé si cette approche rend une fois lorsque vous appelez.show(new View)
et de nouveau surmodel:sync
.basé sur l'un des Derick Bailey exemples:
J'ai recenlty exécuter dans le même problème et l'a réglé sur une tendance à utiliser des Marionnettes du système d'événements de laisser les points de vue de communiquer leur statut avant la cuisson show(). Je suis aussi à l'aide de requireJS qui ajoute une complexité supplémentaire - mais ce schéma permet de!
Je vais avoir une vue avec un élément de l'INTERFACE utilisateur lorsque l'utilisateur clique dessus, déclenche un événement pour charger un nouveau point de vue. Cela pourrait être une sous-vue ou un navview - n'a pas d'importance.
Cet événement est capturé par les Wreqr 'setHandlers" et déclenche une vue sur la séquence de chargement (dans mon cas, je suis en train de faire un tas de logique pour gérer les transitions d'état). Le 'start' de la séquence inits le nouveau point de vue et passe dans les options nécessaires.
Puis la vue de l'obtention de chargement gère les collections de modèles et de récupération sur initalize. La vue est à l'écoute de modèle /de la collection de changements et puis lance un nouveau "prêt" de l'événement à l'aide de wreqr de executre de commande.
J'ai un autre gestionnaire qui attrape l'événement ready (et les options, y compris le point de vue opject de référence) et déclenche le show().
Je vais essayer d'écrire un décent essentiel de l'ensemble du système et de poster ici à la semaine prochaine.