實施ListenTo的所以我不知道這是什麼線做骨幹
obj.on(name, typeof name === 'object' ? this : callback, this);
在Backbone.js的實施listenTo的。我也明白listenTo是一種讓另一個對象響應某個事件時使一個對象發揮作用的方式,同時我也看到Backbone網站說使用listenTo的優點是,如果我銷燬原始對象,那麼其他事件將作用於其他對象可以被刪除。 listenTo是如何實現的?
由於
實施ListenTo的所以我不知道這是什麼線做骨幹
obj.on(name, typeof name === 'object' ? this : callback, this);
在Backbone.js的實施listenTo的。我也明白listenTo是一種讓另一個對象響應某個事件時使一個對象發揮作用的方式,同時我也看到Backbone網站說使用listenTo的優點是,如果我銷燬原始對象,那麼其他事件將作用於其他對象可以被刪除。 listenTo是如何實現的?
由於
這是on
函數簽名:
object.on(事件,回調,[上下文])
event
是一個或者一個事件名稱等「點擊」或像這樣的事件地圖:
{
'click .button': 'handler1',
'keydown': function(){}
}
所以在你發佈的listenTo
代碼裏第一個參數是事件名稱或事件圖。如果它是一個事件名稱(鍵入「string」),則要將指定的回調作爲第二個參數傳遞給on。如果name
是一個事件映射(類型爲「object」),則骨幹通過this
- 它最終將用作上下文,即使它作爲回調傳遞。
看看在eventsApi
功能以及它如何在on
調用:
function(obj, action, name, rest) {
if (!name) return true;
if (typeof name === 'object') {
for (var key in name) {
obj[action].apply(obj, [key, name[key]].concat(rest));
}
}
// ... code in `on`:
eventsApi(this, 'on', name, [callback, context]) && callback)
假設name
是事件映射(因此typeof name ==='object'
是真實的)。對於活動地圖的每個成員,我們都會使用以下參數呼叫on
:[key, name[key]].concat(rest)
。由於rest
是[callback, context]
,我們得到四個參數。
但是,這比on
接受多一個 - 最後一個需要是上下文,而不是callback
。這就是爲什麼listenTo
傳遞this
對象作爲回調,這使得它成爲事件處理程序的上下文。
listenTo
是一個相當新的方法,所以我假設這就是爲什麼變量名無意義。
當視圖被刪除 - 在remove
方法調用stopListening
上的觀點 - 可能是模型的刪除後。該函數僅在所有處理程序上調用off
,如果不傳遞任何參數:
for (var id in listeners) {
listeners[id].off(null, null, this);
}