Backbone事件模型似乎既可用于Capture,也可用于Bubble阶段。 我希望在捕获阶段禁用事件触发,并且只能在泡沫阶段触发/处理事件。
任何指针都会有很大的帮助
答案 0 :(得分:1)
这应该有效:
Backbone.View.extend({
events: {
'click table tr > td > a': function (e) {
e.preventDefault();
e.stopPropagation();
/// do stuff
}
}
}):
答案 1 :(得分:0)
Backbone不会对事件强加事件检测机制。
.on()
实际上,除了Backbone事件之外,必须手动触发,并且没有附加到DOM(做类似myView.on(' event-name',someCallback,view),并触发myView.trigger(' eventName')),所有由事件哈希定义的视图DOM事件都委托给jQuery。
查看绑定事件哈希值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的事件委托,您可以放心,即使在棘手的情况下,您也不必担心事件捕获传播。