【问题标题】:How to re-render partial of model in backbone?如何在主干中重新渲染部分模型?
【发布时间】:2014-05-26 17:21:55
【问题描述】:

我有一个如下的答案列表:

每个列表项都是一个主干模型。

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

当我点击up-vote或down-vote时,模型的voteStatus将会改变,并且这个答案项会被重新渲染。

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

当我只是更改voteStatus 时,我怎么能重新呈现投票按钮?

【问题讨论】:

    标签: templates backbone.js model rerender


    【解决方案1】:

    在您的AnswerView 中有一个子视图,它只负责渲染投票箭头VotingArrowsView。您将在AnswerViewinitialize 函数中初始化此子视图,然后在render 父视图时将子视图的el 附加到父视图的el

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

    【讨论】:

    • 但我还有一个问题,我想我可以将 voteButton 的点击事件(点击 voteUp 和 voteDown)从 AnswerView 移到 VotingArrowsView。当我这样做并单击按钮时,它不起作用。似乎事件监听被破坏了。你能告诉我为什么吗?
    • render 时,我在VotingArrowsView 中使用this.delegateEvents();。全做完了!谢谢:)
    • 不应该有var AnswerView = Backbone.View.extend({ 而不是var AnswerView = Backbone.Model.extend({ 吗?
    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2014-09-18
    相关资源
    最近更新 更多