2012-07-11 43 views
1

我用示例應用程序閱讀了幾篇關於Backbone.js的文章,但我無法找到關於Backbone如何知道單擊視圖中的窗口小部件以及它綁定到哪個模型的解釋或示例。Backbone.js幕後

它是由內部分配的ID或東西處理?

例如,如果你想刪除id =「123」的div,可以使用jQuery或javascript函數從DOM中刪除它。在骨幹這個div可能沒有id,但可以在不知道的情況下被刪除,對吧?

如果有人知道一篇好文章,或者可以提高我的理解,那就太好了。

回答

1

視圖「知道」到它的約束是通過_configure方法完成的模型如下圖所示的方式:

_configure: function(options) { 
    if (this.options) options = _.extend({}, this.options, options); 
    for (var i = 0, l = viewOptions.length; i < l; i++) { 
    var attr = viewOptions[i]; 
    if (options[attr]) this[attr] = options[attr]; 
    } 
    this.options = options; 
} 

進口塊要注意的是:

for (var i = 0, l = viewOptions.length; i < l; i++) { 
    var attr = viewOptions[i]; 
    if (options[attr]) this[attr] = options[attr]; 
} 

viewOptions是對視圖具有「特殊」含義的鍵數組。這裏的數組:

var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName']; 

這個循環是視圖和模型或視圖和集合之間的「膠水」。如果它們出現在選項中,則會自動分配。

這一切都在annotated source code

0

檢查http://www.joezimjs.com/javascript/introduction-to-backbone-js-part-1-models-video-tutorial/

即使它看起來很複雜,但學得如此之少,相信我。

如果您更具體地詢問我可以嘗試提供幫助。

+0

不,這不是我所問的。我已經熟悉基礎知識。我知道它是如何以編程方式綁定的。但是它在內部是如何處理的? – genericatz 2012-07-11 18:22:37

+0

好吧..試着閱讀backbone.js的「開發」版本,與評論等'我相信你會找到它。顯然,使用調試器(Chrome/Firebug/IE/etc)也是如此。它不能太神祕,因爲它很小。 – Poni 2012-07-11 18:39:37

+0

我很害怕這種答案。我想爲人類閱讀而不用費太多的精力;) – genericatz 2012-07-11 18:43:44

0

閱讀源代碼可能是您提高理解力的最佳選擇。您要查看的Backbone函數稱爲delegateEvents。但簡短的版本是它使用了jQuery delegate()函數。根元素是視圖的元素(el屬性),並且它由您提供的任何選擇器過濾。

jQuery實際上並沒有將處理程序綁定到您正在監聽的每個元素。相反,它讓事件冒泡到根元素並在那裏檢查它們。由於沒有附加到每個單獨的元素,你可以自由刪除它們,而不會造成任何問題。然而,刪除視圖元素的一些方法(例如,通過在父元素上設置innerHTML)可能會導致內存泄漏。我對此並不十分確定,但最好不要這樣做。