2012-06-29 46 views
0

我正在經歷學習骨幹的過程,並不理解所有的語法。下面我加入一些我一直在努力學習的骨幹代碼,所以我可以在這個問題中引用它。儘管我掌握了大多數骨幹的工作原理,但我並不完全理解某些代碼中的一些標記背後的一些含義。 BackBone的文檔來源很少。我得到了90%,但是我沒有得到的語法是下劃線'_'真正提供了什麼以及何時使用它。例如下面的代碼在「.bindAll(...」中使用了下劃線。當然,我確實理解綁定是什麼,只是不確定何時使用下劃線和標記起什麼作用。當下劃線顯示在'(this.collection.models).each(function(item)...'代碼之前時,我知道代碼正在做一個循環,但爲什麼它們使用下劃線標記。謝謝你的幫助。下劃線標記在骨幹中做什麼以及我們何時使用它?

(function($){ 

    var Item = Backbone.Model.extend({ 
    defaults: { 
     part1: 'hello', 
     part2: 'world' 
    } 
    });  
    var List = Backbone.Collection.extend({ 
    model: Item 
    }); 

    var ListView = Backbone.View.extend({ 
    el: $('body'), 
    events: { 
     'click button#add': 'addItem' 
    }, 
    initialize: function(){ 
     _.bindAll(this, 'render', 'addItem', 'appendItem'); // remember: every function that uses 'this' as the current object should be in here 

     this.collection = new List(); 
     this.collection.bind('add', this.appendItem); // collection event binder 

     this.counter = 0; 
     //once the object is initialized, render the page. 
     this.render();  
    }, 
    render: function(){ 
    var self = this;  
     $(this.el).append("<button id='add'>Add list item</button>"); 
     $(this.el).append("<ul></ul>"); 
     _(this.collection.models).each(function(item){ // in case collection is not empty 
    self.appendItem(item); 
     }, this); 
    }, 
    addItem: function(){ 
     this.counter++; 
     var item = new Item(); 
     item.set({ 
    part2: item.get('part2') + this.counter // modify item defaults 
     }); 
     this.collection.add(item); // add item to collection; view is updated via event 'add' 
    }, 
    appendItem: function(item){ 
     $('ul', this.el).append("<li>"+item.get('part1')+" "+item.get('part2')+"</li>"); 
    } 
    }); 

    var listView = new ListView(); 
})(jQuery); 
+0

參見:http://underscorejs.org/ – tgriesser

回答

2

下劃線無非是收集的效用/有用的功能這是有效的,跨瀏覽器的多。下劃線的每個函數都以下劃線字符_開頭(因此名爲Underscore)。

(重點煤礦)

下劃線是JavaScript的一個實用帶庫,提供一個 很多功能編程的支持,你會期望在 的Prototype.js(或Ruby)的,但是沒有擴展任何內置的 JavaScript對象。這與jQuery的禮服一起搭配,以及Backbone.js的吊帶。

骨幹也可能有自己的一套功能,但由於需要的實用功能已經存在於Underscore中,它們被骨幹使用。換句話說,Backbone與Underscore配合使您在編程/功能需求方面提供更多功能和靈活性。

請注意,Backbone和Underscore都是由同作者寫的。

瞭解更多關於文檔:

http://underscorejs.org/

0

這是最好把下劃線或多或少的方便的實用程序功能的命名空間的。他們只是用下劃線從污染全局命名空間保留。

對於比這更多的信息,這是最好的閱讀文檔:underscore

特別,你似乎陷入了對使用正在chaining

0

下劃線在其本身和圖書館,其骨幹發生在其源利用。它的API完全包含在_命名空間中,一個對象。

下劃線主要關注JavaScript數據級別的本地API擴展。也就是說,它更喜歡用於相交數組的方法,而不是用DOM操作(即jQuery專門研究的方法)。

它也有一個模板系統,Backbone使用的其他東西。

0

Underscore.js是一個JavaScript實用程序庫,由DocumentCloud,Backbone.js的創建者編寫。

它可以作爲Backbone.js以外的可分發組件使用,這就是爲什麼它有自己的名稱空間。

它通過提供各種功能語言結構的接口來幫助開發人員,所有功能語言結構不一定由所有瀏覽器支持。

Underscore.js Documentation

例如:

bindAll_.bindAll(object, [*methodNames]) 

綁定一個數的對象的方法,通過指定的方法名,至在 該對象的上下文中運行時,他們被調用。非常方便的綁定函數將被用作事件 處理程序,否則將被調用相當無用的。 如果未提供任何methodNames,則將綁定該對象的所有功能 屬性。

相關問題