主干事件 - 禁用捕获阶段



主干事件模型似乎可用于捕获和气泡阶段。我想在捕获阶段禁用事件的触发,并且只能在气泡阶段触发/处理事件。

任何指针都会有很大帮助

这应该有效:

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

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

骨干网.on()

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

骨干事件

看看绑定事件哈希中的事件的 Backbone 方法,delegateEvents

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;
}

从 jQuery 手册页的 on 函数:

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

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

现在不是所有事件都冒泡了。短名单(来自浏览器事件):

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

  • 焦点/模糊:jQuery使用focusin/focusout技巧来冒泡焦点/模糊事件

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

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

相关内容

  • 没有找到相关文章

最新更新