骨幹

2013-02-28 118 views
4

實施ListenTo的所以我不知道這是什麼線做骨幹

 obj.on(name, typeof name === 'object' ? this : callback, this); 

在Backbone.js的實施listenTo的。我也明白listenTo是一種讓另一個對象響應某個事件時使一個對象發揮作用的方式,同時我也看到Backbone網站說使用listenTo的優點是,如果我銷燬原始對象,那麼其他事件將作用於其他對象可以被刪除。 listenTo是如何實現的?

由於

回答

4

這是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); 
}