Épine dorsale de Rendre la Vue sur la mise à jour du modèle
Je suis en train d'écrire un exemple d'application à l'aide de backbone.js.
Sur la mise à jour de mon modèle, je ré-rendu de mon point de vue dans ce mode
$('.target').html("");
$('.target').append(this.$el.html(this.template(model)))
Une fois que la vue est re-rendus après la mise à jour du modèle [sur modifier l'événement], les événements attachés à la el
'enfants s est perdu [ne semble pas être comme jQuery
live]. Est-ce un problème connu ou ai-je raté quelque chose? Devrais-je essayer de remplacer le html au lieu de append
? violon
- Vous pourriez vouloir corriger votre violon pour qu'il fonctionne. par exemple. à l'aide de jQuery et notamment trait de Soulignement et de la colonne vertébrale ainsi
- vous n'avez pas besoin de deux états. Il suffit d'utiliser une:
$('.target').html(this.$el.html(this.template(model)))
, ce qui est équivalent à la compensation de l'HTML et en ajoutant un nouveau - Fielden Puis j'ai peut-être besoin de mettre toute mon application 😀 j'ai pensé à la vue suffit à comprendre mon problème
- vous avez raison, j'espère que ça a fonctionné. Permettez-moi de faire un dernier test et retour. J'ai d'abord été de faire
$this.el.html()
qui a raté le wrapper div. Mais votre soln il fixe
Vous devez vous connecter pour publier un commentaire.
Une fois que la vue est dans les DOM, vous n'avez pas besoin d'enlever et d'ajouter. Je pense que la façon la plus simple de gérer cela est de supprimer le DOM d'insertion à partir de la vue complètement, et de laisser l'appelant de
view.render
de prendre soin d'elle.Vue:
De l'appelant (sur le premier rendu):
Sur les renders:
Après le point de vue a été rendue dans le DOM il peut garder heureux de re-rendu de lui-même sans avoir besoin de savoir quelque chose au sujet de parent points de vue. L'événement liaisons doivent rester intacts entre les renders.
append
au lieu de les remplacer?append
une fois, quand vous voulez le point de vue d'être présentée pour la première fois. Après cela, il suffit d'appelerrender
sur la vue, parce queview.$el
est déjà dans les DOM. J'ai mis à jour ma réponse pour plus de clarté. Mais oui,$.replaceWith
ou de toute autre manière aurait le même résultat.this
vue contient des sous-vues, dans votre fonction rendu vous aurez besoin d'ajouterthis.delegateEvents();
.