Wie rendere ich einen Teil des Modells im Backbone neu?
-
21-12-2019 - |
Frage
Ich habe eine Antwortliste wie unten:
Jedes Listenelement ist ein Backbone-Modell.
{
title: 'answer title...',
content: 'answer content...',
voteStatus: 'up'
}
Wenn ich auf „Up-Vote“ oder „Down-Vote“ klicke, wird das Modell angezeigt voteStatus
wird geändert und dieses Antwortelement wird erneut gerendert.
Wenn der Inhalt der Antwort ein Bild enthält, wird das Bild ebenfalls neu gerendert. Dies ist jedoch nicht das, was ich möchte.
Wie könnte ich die Abstimmungsschaltfläche einfach neu rendern, wenn ich sie gerade ändere? voteStatus
?
Lösung
Haben Sie eine Unteransicht in Ihrem AnswerView
das ist nur für die Darstellung der Abstimmungspfeile verantwortlich, VotingArrowsView
.Sie würden diese Unteransicht innerhalb der initialisieren initialize
Die Funktion von AnswerView
und stellen Sie dann die Unteransichten voran el
zur übergeordneten Ansicht el
Wann render
ing der übergeordneten Ansicht:
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;
}
});