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')。」部分尤其是相關的。 –