骨干牵线木偶回报

时间:2014-09-03 18:08:39

标签: backbone.js rendering marionette backbone-views backbone-events

当我从代码的其他部分触发“page:change:after”事件时,我正在尝试重新渲染Marionette Itemview。我尝试过两种方式:

1

    self.listenTo(this.paginatedCollection,"page:change:after",function(){
        console.log("page:change:after detected!!!!!!!!!!!!!!!!!!");

        self.render;
    });

2

    this.listenTo(this.paginatedCollection,"page:change:after",self.render);

出于某种原因,#2有效,但不是#1。控制台登录#1的回调确实运行(我可以在我的控制台上看到“页面:更改:检测到后”)。我还添加了一个打印出“onRender!”的onRender方法。当我使用#2但不是#1时。看起来视图没有用#1渲染。有人可以提供一些有关此行为的见解吗?

这是一个更完整的代码段,可提供更好的上下文:

Views.PaginationControls = Marionette.ItemView.extend({
        template: "#contact-paginator",

        initialize: function(options){

          var self = this;
          this.paginatedCollection = options.paginatedCollection;

          //why is this not working?
          self.listenTo(this.paginatedCollection,"page:change:after",function(){
              console.log("page:change:after detected!!!!!!!!!!!!!!!!!!");

              self.render;
          });



          //this works
          this.listenTo(this.paginatedCollection,"page:change:after",self.render);
        },

        onRender: function(){
          console.log("onRender!")
        }

});

1 个答案:

答案 0 :(得分:0)

在第一个例子中,你没有执行方法 - 应该是'self.render()` - 我怀疑这是问题的根源

那说 - 我认为这样可行,可能更干净,因为你可以完全摆脱自我:

this.listenTo(this.paginatedCollection,"page:change:after",this.render);