0

我试图在我的代码的其他部分触发“page:change:after”事件时重新呈现一个Marionette ItemView。我试图做它在两个方面:Backbone marionette render

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!") 
     } 

}); 

回答

0

在第一个例子,你是不是在执行方法 - 应该是“self.render()` - 我怀疑这是根

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

+0

是的,你:我认为这会工作,可能是清洁的,因为你可以得到完全摆脱自我的 - 问题

那说的是绝对正确的。我怎么能看不到!谢谢。 – nsxtasy 2014-09-03 20:22:33

相关问题