主干事件模型似乎可用于捕获和气泡阶段。我想在捕获阶段禁用事件的触发,并且只能在气泡阶段触发/处理事件。
任何指针都会有很大帮助
这应该有效:
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 的事件委托,因此您可以放心,即使在更棘手的情况下,您也不必担心事件捕获传播。