【问题标题】:Unbind Backbone View Events取消绑定主干视图事件
【发布时间】:2012-09-03 18:53:08
【问题描述】:

我有坠落事件哈希 -

events:
  'click #someButton : 'someFunction'

关闭我尝试过的视图

close:
  $("#someButton").unbind("click")

和

   `close:

       $("#someButton").remove()`

但是 someFunction 仍然不止一次被触发。如何从按钮取消绑定此事件?

我也试过了

$(@el).find("#someButton").unbind("click") as well 

【问题讨论】:

标签: javascript events backbone.js coffeescript


【解决方案1】:

Backbone.js 视图事件被委托给视图的el(因此没有事件绑定到您的#someButton 元素,而是当点击事件冒泡到el 时,它会检查事件是否发生来自与该选择器匹配的元素),在这种情况下,您需要将事件从 el 中删除,例如

  $(this.el).off('click', '#someButton');

如果您想删除所有委托事件,您可以使用视图的undelegate 方法

【讨论】:

  • 嗯,我试过这样做,但该函数仍然多次触发
  • 试试$(this.$el).off("click", "#someButton");
  • 成功了 :) unbind.click("click") 有什么问题?
  • 一个委托事件绑定到某个父级元素(在本例中为视图的el),当一个事件冒泡时,它会检查该事件是否与指定的选择器匹配。该事件未绑定到实际的选择器(事实上,事件委托的常见用途之一是为将动态添加的元素绑定事件。您可能需要在 jquery 文档中阅读更多关于它的信息.on() 方法
  • 谢谢,我快疯了,我的事件触发了多次,每次调用 render() 1x...
【解决方案2】:

杰克的解释和回答很棒。不幸的是,他的代码示例对我不起作用。而不是使用:

 $(this.el).off('click', '#someButton');

我不得不使用:

 this.$el.off('click', '#someButton');

这对我来说很有意义,因为事件绑定到 this.$el 对象。

【讨论】:

    【解决方案3】:

    为了进一步补充,我在子视图的初始化中使用了this.$el.off(); 来销毁与子视图相关的所有事件。同一事件会触发 X 次调用数据刷新。

    我看到重复的目标使用:

    var $target = $(e.currentTarget);
    console.log($target);
    

    我会在答案中添加评论,但我的声誉很低。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多