2014-04-12 48 views
8

我有一个答案列表如下图所示:如何在骨干重新渲染部分模型?

enter image description here

每个项目为骨干的模型。

{ 
    title: 'answer title...', 
    content: 'answer content...', 
    voteStatus: 'up' 
} 

当我点击赞成票或反对票,该模型的voteStatus将改变,而这个答案项目被重新呈现。

如果答案内容中有图片,图片也会重新渲染,但这不是我想要的。

我刚换好voteStatus后,怎么才能重新显示投票按钮?

回答

7

您的AnswerView中有一个子视图,它只负责呈现投票箭头VotingArrowsView。你会初始化的AnswerViewinitialize函数内部的子视图,然后在前面加上子视图的el父视图的elrender荷兰国际集团父视图:

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; 
    } 
}); 
+0

这工作得很好,非常感谢! – Robin

+0

但我有另一个问题,我想我可以将voteButton的点击事件(点击voteUp和voteDown)frome'AnswerView'移动到'VotingArrowsView'。当我这样做,然后点击按钮,这是行不通的。听起来事件似乎被打破了。你能告诉我为什么吗? – Robin

+1

当'render'时,我在'VotingArrowsView'中使用'this.delegateEvents();'。全做完了!谢谢:) – Robin