2013-01-23 14 views
1

當你看着Backbone.js的版本0.9.2的源代碼,有Backbone.js的onModelEvent

「_onModelEvent」:

這種方法是從模型到負責轉發事件收集(冒泡)。所以當你改變屬於集合的一部分的模型中的東西時(有「set」),有一個改變事件,並且因爲(在add方法中)_onModelEvent方法被綁定到模型(「all 「),這個方法被調用。

我還看到,有一個銷燬方法,它會觸發一個「銷燬」事件。

但是爲什麼作者(在_onModelEvent的第一行)檢查,如果事件名稱是「add」或「remove」。通常模型上沒有「添加」事件?

我不明白這一點。

有人可以解釋給我嗎?

在此先感謝

_onModelEvent: function(event, model, collection, options) { 
    if ((event == 'add' || event == 'remove') && collection != this) return; 

回答

1

隨着骨幹網,您可以創建nested model structures and collections。因此,您可以創建一個集合,其中模型是一個集合。這樣的方式,檢查到位:

annotated source

所以:

_onModelEvent:

調用每次在設定的模型觸發一個事件,時間內部方法。 當模型更改ID時,集合需要更新它們的索引。所有其他 事件只是通過代理。在其他集合中發起的「添加」和「刪除」事件將被忽略。

所以,如果你有一個集合作爲模型。如果將項目添加到/從子集合中移除,則它不會委派addremove事件,因爲在那種情況下,只有子集合發生更改,而不是父項目。

+0

謝謝您的支持! –