Backbone.js extraction de la collecte à partir de la méthode initialize
quelqu'un la création d'une application pour nous, m'a fourni le code afin que je puisse aller à travers elle,
et je l'ai remarqué, au premier abord, elle semble OK, et même agréable de laisser la collection de gérer ses données
mais après un moment, j'ai commencé la réflexion sur les erreurs possibles dans cette idée
donc:
c'est bien pratique pour aller chercher une collecte de données à partir de sa propre méthode initialize.
par exemple:
var Book = Backbone.Model.extend({});
var Books = Backbone.Collection.extend({
url: '/books',
initialize: function(){
//do some logic here
//if collection is empty, fetch from server
if(this.size() == 0)
this.fetch();
}
});
je pose cette question car je pense qu'elle pourrait être un problème dans la situation suivante:
supposons que nous sommes dans un routeAction:
books: function() {
var books = new Books();
var bookList = new BookList({ collection: books });
}
n'est-ce pas la situation d'un éventuel échec, si la récupération est plus rapide que l'initialisation de la vue, d'où la vue serait lié à un événement de réinitialisation, la réinitialisation aurait déclenché façon avant l'initialisation de la vue avait été exécuté?
suis-je tromper sur ce point, ou devrais-je soumettre un ticket pour la résolution de ce problème.
OriginalL'auteur Sander | 2012-03-07
Vous devez vous connecter pour publier un commentaire.
Tandis que, dans la pratique, l'initialisation de la vue sera plus susceptible de se produire avant
fetch()
est terminée (et vous lierrender()
àreset
pasinitialize()
) c'est une très mauvaise idée de s'appuyer sur l'ordre des opérations asynchrones de toute façon. En d'autres termes, votre code doit être écrit d'une manière qui rend ordre de pertinence.J'ai vu
fetch()
être appelé dansinitialize()
dans divers projets. Je pense toujours que c'est indésirables et les mauvaises pratiques. Explicitement récupérer lorsque vous devez aussi a ces avantages:Vous pouvez faire certaines choses dans l'ordre si vous voulez:
Par exemple, vous pouvez initialiser votre point de vue et que le rendu une fois que vous avez récupéré.
Il facilite les tests.
Comme vous le laissez entendre dans votre question, c'est une question d'utiliser la bonne approche. L'extraction de l'intérieur
initialize
ne produira pas une erreur. C'est juste inefficace, moche et principe mal.Merci!!!! J'ai passé 20 minutes à essayer de comprendre les blocs de code à l'intérieur des listes et a échoué. Je m'ennuie de mon repos...
Vous êtes les bienvenus, parfois mon TOC tendances sont utiles.
Je le fais dans un SyncPanel composant. Par exemple panneau.charge({tâches: {fetch: [livres]}, sync: fonction doSomeThingWithBooks (){...}}). Il est beaucoup plus facile à gérer en parallèle des appels et des erreurs de la sorte...
OriginalL'auteur ggozad