骨干事件 - 禁用捕获阶段

时间:2015-01-06 23:58:29

标签: javascript backbone.js event-handling

Backbone事件模型似乎既可用于Capture,也可用于Bubble阶段。 我希望在捕获阶段禁用事件触发,并且只能在泡沫阶段触发/处理事件。

任何指针都会有很大的帮助

2 个答案:

答案 0 :(得分:1)

这应该有效:

Backbone.View.extend({
  events: {
    'click table tr > td > a': function (e) {
       e.preventDefault();
       e.stopPropagation();
      /// do stuff
     }
  }
}):

答案 1 :(得分:0)

Backbone不会对事件强加事件检测机制。

Backbone .on()

实际上,除了Backbone事件之外,必须手动触发,并且没有附加到DOM(做类似myView.on(' event-name',someCallback,view),并触发myView.trigger(' eventName')),所有由事件哈希定义的视图DOM事件都委托给jQuery。

Backbone.events

查看绑定事件哈希值delegateEvents中事件的Backbone方法:

delegateEvents: function(events) {
  if (!(events || (events = _.result(this, 'events')))) return this;
  this.undelegateEvents();
  for (var key in events) {
    var method = events[key];
    if (!_.isFunction(method)) method = this[events[key]];
    if (!method) continue;

    var match = key.match(delegateEventSplitter);
    var eventName = match[1], selector = match[2];
    method = _.bind(method, this);
    eventName += '.delegateEvents' + this.cid;

    /*** (Seebiscuit Comment  ***
     * This is where the event is 
     * actually bound.        ***/
    if (selector === '') {
      this.$el.on(eventName, method); /* (Seebiscuit) Notice the jQuery */
    } else {
      this.$el.on(eventName, selector, method);
    }
  }
  return this;
}

来自on函数的jQuery手册页:

  

在Internet Explorer 8及更低版本中,一些事件(例如更改和提交)本身并不会冒泡,但jQuery会将这些事件修补为泡泡并创建一致的跨浏览器行为。 jQuery.on

如果你在文档中进一步阅读,你会发现jQuery选择像大多数浏览器那样冒泡事件。

现在并非所有事件都会冒泡。短名单(来自Browser Events):

  • 更改/提交/重置:不要在IE 6/7/8中冒泡,但jQuery会让他们冒泡

  • 焦点/模糊:jQuery使用focusin / focusout黑客来模糊焦点/模糊事件

  • load / error / resize / readystatechange /...:窗口或与事件委派无关的XHR对象上的方法

但是,由于Backbone使用jQuery的事件委托,您可以放心,即使在棘手的情况下,您也不必担心事件捕获传播。