Backbone.js: appel render() de la vue de l'Initialiser: fonction
Je veux mon point de vue pour le rendu de lui-même lorsqu'il est créé, donc je fais appel this.render();
dans le initialize:
fonction, comme ceci (code retiré):
var MyView = Backbone.View.extend({
el: $("#mydiv"),
initialize: function() {
this.render();
}
...
Dans le render:
fonction je suis alors en boucle par le biais d'un enfant de la collection, et en ajoutant le rendu des vues de chaque élément d'enfant:
render: function() {
this.model.somecollection.forEach(function(c) {
var view = new ChildView({ model: c });
this.el.append(view.render().el); //*****
});
return this;
},
Le problème que je vais avoir, c'est que la référence à this
dans la fonction rendu (marquées par des astérisques) est mis à window
plutôt que de la MyView
objet, et c'est ce qui provoque une erreur.
Je suppose que je suis l'appel de affiche de manière incorrecte (actuellement this.render();
). Comment devrais-je faire cela pour que les this
contexte est-elle préservée?
that
en dehors de la boucle for.Doh! stupide de moi - ajouter une réponse et je vais l'accepter.
Fait. Merci 🙂
OriginalL'auteur UpTheCreek | 2011-09-13
Vous devez vous connecter pour publier un commentaire.
Enregistrer
this
en dehors de la boucle for.this
n'est pas transporté à l'intérieur de la boucle si vous utilisez_.each()
.Backbone.Collection.each()
prend un troisième argument pour le contexte.Cobby commentaire est important. Le
var that=this;
truc, c'est un peu un hack, et se sent en quelque sorte crufty de nos jours. À l'aide d'un mieuxeach
de mise en œuvre réduit le bruit de fond un peu.Vous pouvez également utiliser .bind() pour définir le ce contexte.
OriginalL'auteur ZeissS
En Javascript, chaque fois que vous entrez une nouvelle fonction du contexte, la valeur de
this
a probablement changé. Tout ce que vous devez faire est de stocker la valeur dethis
avant d'entrer dans la fonction:OriginalL'auteur Skylar Anderson
c'est la façon dont nous l'utilisons ici,
de cette façon, le rendu est toujours invoqué lorsqu'il est initialisé.
nous donner le " el " à la vue lorsque nous créons la vue,
et le rendu de la fonction insère du code html à partir de cet élément.
OriginalL'auteur Sander
Dans le contexte de la fonction anonyme, ce qui renvoie à la portée globale. Vous devez conserver explicitement cette option si vous souhaitez utiliser le code dans la façon dont vous avez écrit. En supposant que vous avez jquery dans votre page : $.proxy fonction peut être utilisée :
Sinon, le trait de soulignement a un _.fonction de liaison qui fonctionne d'une manière similaire.
Aussi, si vous définissez une variable locale et de l'attribuer à ce en dehors de la fonction anonyme, vous pouvez l'utiliser à la place de cela à l'intérieur de la fonction anonyme.
OriginalL'auteur lorefnon
Si somecollection est une colonne vertébrale.Collection, vous devriez être en mesure de dire:
this.model.somecollection.each(..., this);
Le dernier paramètre est le contexte pour être utilisé à l'intérieur de la fonction.
OriginalL'auteur Aaronius