Как перерисовать часть модели в магистрали?
-
21-12-2019 - |
Вопрос
У меня есть список ответов, как показано ниже:
каждый элемент списка является базовой моделью.
{
title: 'answer title...',
content: 'answer content...',
voteStatus: 'up'
}
Когда я нажимаю кнопку «голосовать за» или «голосовать против», модель voteStatus
будет изменено, и этот элемент ответа будет перерисован.
Если в содержании ответа есть изображение, оно также будет перерисовано, но это не то, что я хочу.
Как я мог просто перерисовать кнопку голосования, когда я просто меняю voteStatus
?
Решение
Имейте подпредставление внутри вашего AnswerView
который отвечает только за отображение стрелок для голосования, VotingArrowsView
.Вы должны инициализировать это подпредставление внутри initialize
функция AnswerView
а затем добавьте подпредставление el
к родительскому представлению el
когда render
использование родительского представления:
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;
}
});