Backbone.js 重写主干中的delegateEvents
我的一个视图应该侦听窗口大小调整事件,因此我尝试覆盖delegateEvents和undelegateEvents以绑定/解除绑定该侦听器 在view类中,我将:Backbone.js 重写主干中的delegateEvents,backbone.js,coffeescript,Backbone.js,Coffeescript,我的一个视图应该侦听窗口大小调整事件,因此我尝试覆盖delegateEvents和undelegateEvents以绑定/解除绑定该侦听器 在view类中,我将: delegateEvents: => $(window).on 'resize',@windowResized super undelegateEvents: => $(window).off 'resize',@windowResized super 但不知何故,这会导致在实例化视
delegateEvents: =>
$(window).on 'resize',@windowResized
super
undelegateEvents: =>
$(window).off 'resize',@windowResized
super
但不知何故,这会导致在实例化视图后立即由delegateEvents调用undelegateEvents,我认为这是它处理某些错误情况的方式。为什么这不起作用?做我想做的事情的正确方法是什么
编辑:
看来问题可能与重写delegateEvents无关。即使已注释掉自定义delegateEvents方法,也会立即调用undelegateEvents。为什么会这样
编辑2:
为了给混合添加更奇怪的内容,即使在调用UnelegateEvents之后,events属性中定义的其他事件也会继续工作。如果查看主干源代码,则
视图.delegateEvents
方法定义如下:
delegateEvents: function(events) {
if (!(events || (events = _.result(this, 'events')))) return;
this.undelegateEvents();
//...
}
所以主干首先在内部调用undelegateEvents
。这可能是为了使delegateEvents
方法重新进入,因此可以多次调用它而不会产生副作用
您可以通过让超类先委派事件来解决此问题:
delegateEvents: =>
super
$(window).on 'resize',@windowResized
如果查看主干源代码,
View.delegateEvents
方法定义如下:
delegateEvents: function(events) {
if (!(events || (events = _.result(this, 'events')))) return;
this.undelegateEvents();
//...
}
所以主干首先在内部调用undelegateEvents
。这可能是为了使delegateEvents
方法重新进入,因此可以多次调用它而不会产生副作用
您可以通过让超类先委派事件来解决此问题:
delegateEvents: =>
super
$(window).on 'resize',@windowResized