当我从代码的其他部分触发“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!")
}
});
答案 0 :(得分:0)
在第一个例子中,你没有执行方法 - 应该是'self.render()` - 我怀疑这是问题的根源
那说 - 我认为这样可行,可能更干净,因为你可以完全摆脱自我:
this.listenTo(this.paginatedCollection,"page:change:after",this.render);