delegateEvents
是被调用来应用events
视图属性的事件的视图上的函数。
省略selector
会导致事件绑定到视图的根元素(this.el
)。默认情况下,delegateEvents
在视图的构造函数中调用了 你,所以如果你有一个简单的events
散列,你所有的DOM事件总是会被连接,你不必自己调用这个函数。
这是setElement
function(line 1273)内部发生:
setElement: function(element) {
this.undelegateEvents();
this._setElement(element);
this.delegateEvents();
return this;
},
所以语法是相同的,两者的语法著作。
var InputView = Backbone.View.extend({
events: {
// keydown event from ".sub-element", which must be a child of the view's root
"keydown .sub-element" : "keyAction",
"keydown" : "keyAction", // keydown event from the root element
},
});
里面的delegateEvents
功能,key
(例如"keydown .sub-element"
)使用正则表达式(line 1311)分开。
var match = key.match(delegateEventSplitter);
this.delegate(match[1], match[2], _.bind(method, this));
正则表达式分裂从选择器(line 1227)事件:(line 1317)
// Cached regex to split keys for `delegate`.
var delegateEventSplitter = /^(\S+)\s*(.*)$/;
而delegate
功能:
// Add a single event listener to the view's element (or a child element
// using `selector`). This only works for delegate-able events: not `focus`,
// `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.
delegate: function(eventName, selector, listener) {
this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);
return this;
},
什么时候事件对象的键只有类似keydown的东西? – Jwan622
@ Jwan622我更新了我的答案,并提供了更多细节。 –
@ Jwan622阅读所有'delegateEvents'文档,“忽略'selector'导致事件绑定到视图的根元素('this.el')。”部分尤其是相关的。 –