Comment restituer une partie du modèle dans le backbone ?
-
21-12-2019 - |
Question
J'ai une liste de réponses comme ci-dessous :
chaque élément de la liste est un modèle de base.
{
title: 'answer title...',
content: 'answer content...',
voteStatus: 'up'
}
Lorsque je clique sur un vote positif ou négatif, le modèle voteStatus
sera modifié et cet élément de réponse sera restitué.
S'il y a une image dans le contenu de la réponse, l'image sera également restituée, mais ce n'est pas ce que je veux.
Comment pourrais-je simplement restituer le bouton de vote alors que je viens de changer voteStatus
?
La solution
Avoir une sous-vue dans votre AnswerView
qui est uniquement responsable du rendu des flèches de vote, VotingArrowsView
.Vous initialiseriez cette sous-vue dans le initialize
fonction de AnswerView
puis ajoutez le préfixe de la sous-vue el
à la vue parent el
quand render
ing la vue parent:
var AnswerView = Backbone.View.extend({
initialize: function(options){
this.template = _.template($('#answerTmpl').html());
this.votingArrowsView = new VotingArrowsView({ model: this.model });
...
},
render: function(){
this.$el.html(this.template(this.model.toJSON()));
this.$el.prepend(this.votingArrowsView.render().el);
return this;
},
...
});
var VotingArrowsView = Backbone.View.extend({
initialize: function(options){
this.template = _.template($('#votingArrowsTmpl').html());
this.listenTo(this.model, 'change:voteStatus', this.render);
},
render: function(){
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});