Events Backbone.js Views:我只需要取消一个视图上的一个事件

Events Backbone.js Views:我只需要取消一个视图上的一个事件,events,backbone.js,view,backbone-views,Events,Backbone.js,View,Backbone Views,我有一个主干。视图包含以下事件: ... events : { "click .text1" : "doSomething", "click .text2" : "doAnotherThing", }, ... 我需要取消第二个事件。我知道你可以用这个;但它取消了视图上所有事件的委派。我只需要取消一个事件。 我该怎么做?来自: delegateventsdelegatevents([events]) 使用jQuery的on函数为视图中的DOM事件提供声明性回调。 […] 当

我有一个主干。视图包含以下事件:

...

events : {
    "click .text1" : "doSomething",
    "click .text2" : "doAnotherThing",
},

...
我需要取消第二个事件。我知道你可以用这个;但它取消了视图上所有事件的委派。我只需要取消一个事件。 我该怎么做?

来自:

delegatevents
delegatevents([events])

使用jQuery的
on
函数为视图中的DOM事件提供声明性回调。
[…]
当再次运行delegateEvents时,可能会使用不同的
events
散列,所有回调都将被删除并重新委托-对于在不同模式下需要不同行为的视图非常有用

注意两件事:

  • 您可以将
    events
    对象传递给
    delegateEvents
    ,默认情况下,它将使用
    this.events
    ,但如果需要,您可以使用不同的事件
  • 调用
    delegateEvents
    或多或少会在绑定新事件之前调用
    undelegateEvents
  • 把这些放在一起,我们可以:

    this.delegateEvents(
        _(this.events).omit('click .text2')
    );
    
    这是一种简单的方法,可以删除要删除的单个事件处理程序。顺便说一句,只需给您一个对象的副本,其中省略了某些键,因此
    (this.events).omit('click.text2')
    可用于获取您感兴趣的事件绑定,而无需更改
    this.events
    (该绑定附加到原型上,因此由您视图的所有当前和未来实例共享)


    演示:

    来自主干文档:

    delegateEvents的单事件版本可作为
    delegate
    提供。在里面 事实上,delegateEvents只是一个围绕
    delegate
    的多事件包装器。
    undelegateEvents
    的对应项可通过
    undelegate
    获得

    源代码中的函数是:

    undelegate: function(eventName, selector, listener) {
      this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);
      return this;
    }
    
    所以调用
    this.unelegate(“单击“,”.text2”)