2011-09-14 112 views
1

我正在關注位於here的BackboneJs上的教程。BackboneJs教程問題

關於在render方法,他做了以下中途下:

events: { 'click button#add': 'addItem' }, 

    initialize: function() { 
     this.collection = new List(); 

     // Collection event binder 
     this.collection.bind('add', this.appendItem); 

     this.counter = 0; 
     this.render(); 
    }, 

    render: function() { 
     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 
      appendItem(item); 
     }, this); 
    }, 

    addItem: function() { 
     var item = new Item(); 

     this.counter++; 

     item.set({ 
      part2: item.get('part2') + " " + this.counter 
     }); 

     this.collection.add(item); 
    }, 

    appendItem: function (item) { 
     $('ul').append('<li>' + item.get('part1') + " " + item.get('part2') + '</li>'); 
    } 

我有幾個關於線下的問題。

_(this.collection.models).each(function(item){ 
    // in case collection is not empty 
    appendItem(item); 
}, this); 

下劃線_在這方面做了什麼?

爲什麼這甚至需要?

如果收集不是空的,則說明註釋。但是,沒有這條線它工作得很好。 initialize函數中的bind覆蓋告訴Backbone在集合上觸發add事件時運行this.appendItem,或者我認爲並通過刪除相關行來確認。

回答

2

我認爲這個方法通常將一個數組包裝在一個「下劃線」輔助類中,使它可以訪問所有的underscore.js輔助方法。在這種情況下,.each方法來自下劃線助手類。

就像你說的,但是,如果沒有它,這應該可以正常工作。這可能是本教程編寫的骨幹版本(v0.3.3)需要_方法來迭代像這樣的模型數組。

underscore.js文檔(http://documentcloud.github.com/underscore/)討論了使用_()作爲方法調用,而不是在面向對象的mannter中使用庫。

+0

完美。謝謝。我完全忘記了下劃線是一個依賴:)我認爲這可能是一個主幹的事情。 –