Вопрос

У меня есть список ответов, как показано ниже:

enter image description here

каждый элемент списка является базовой моделью.

{
  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;
  }
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top