Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 重写主干中的delegateEvents_Backbone.js_Coffeescript - Fatal编程技术网

Backbone.js 重写主干中的delegateEvents

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和undelegateEvents以绑定/解除绑定该侦听器

在view类中,我将:

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