comment backbone.js modèle de la méthode de récupération des œuvres
je suis très confondre sur l'utilisation de backbone.js modèle de méthode de récupération. Voir l'exemple suivant
routeur de la colonne vertébrale:
profile: function(id) {
var model = new Account({id:id});
console.log("<---------profile router-------->");
this.changeView(new ProfileView({model:model}));
model.fetch();
}
la première étape, le modèle de compte sera instancié, le compte modèle ressemble à ceci.
define(['models/StatusCollection'], function(StatusCollection) {
var Account = Backbone.Model.extend({
urlRoot: '/accounts',
initialize: function() {
this.status = new StatusCollection();
this.status.url = '/accounts/' + this.id + '/status';
this.activity = new StatusCollection();
this.activity.url = '/accounts/' + this.id + '/activity';
}
});
return Account;
});
urlRoot bien pour ce que c'est? Après le modèle de l'objet créé, l'profileview sera rendu avec cette cette.changeView(nouveau ProfileView({modèle:modèle}));, le changeview fonction ressemble à ceci.
changeView: function(view) {
if ( null != this.currentView ) {
this.currentView.undelegateEvents();
}
this.currentView = view;
this.currentView.render();
},
après le rendu de la vue, les informations de profil n'affiche pas encore, mais après modèle.fetch(); instruction execute, les données de modèle s'affiche, pourquoi? Je ne sais vraiment pas comment récupérer fonctionne, j'ai essayer de trouver, mais pas de chance.
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas entièrement sûr de ce que votre question est ici, mais je ferai de mon mieux pour expliquer ce que je peux.
Le concept derrière le urlRoot est que serait l'URL de base et de l'enfant les éléments seraient extraites ci-dessous avec l'id ajouté que urlRoot.
Par exemple, le code suivant:
va définir l'url de base. Alors si vous étiez à instancier ce et appel fetch():
il ferait la demande suivante:
Dans votre cas, vous êtes à la définition de la urlRoot puis de définir explicitement une url pour que la urlRoot vous devrait être ignoré.
Je vous encourage à regarder dans l'épine Dorsale de la source (il est très succinct) pour voir comment l'url est dérivé: http://backbonejs.org/docs/backbone.html#section-65
Pour répondre à votre autre question, la raison pour laquelle les informations de votre profil n'affiche pas immédiatement, c'est que fetch() va dans le réseau, va vers ton serveur, et doit attendre une réponse avant de pouvoir l'afficher.
Ce n'est pas instantané.
Il est fait d'une non-blocage de la mode, la signification de lui en feront la demande, continuer à faire ce qu'il fait, et lorsque la demande provient du serveur, il déclenche un événement qui épine Dorsale utilise pour assurez-vous d'autre chose à faire, maintenant que vous avez les données du modèle, est fait.
J'ai mis quelques commentaires dans votre extrait de code pour expliquer ce qui se passe ici:
Donc, si vous voulez vous assurer que votre vue est mise à jour une fois que le modèle a été récupérée il y a quelques façons dont vous pouvez faire ce que: (1) passer d'un succès de rappel pour le modèle.fetch() (2) enregistrer un gestionnaire sur votre point de vue de montres pour le "sync" de l'événement, re-rend la vue quand il revient (3) mettre le code pour l'instanciation de votre point de vue dans la réussite de rappel, de cette façon, la vue ne sera créé qu'après la demande du réseau de retours et de votre modèle a ses données.