2011-09-14 7 views
1

hereにあるBackboneJsで見つけたチュートリアルに従っています。彼は次のことを行いrender方法で半押しについてBackboneJsチュートリアルの質問

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のオーバーライドは、addイベントがコレクションでトリガされたときにBacklightにthis.appendItemを実行するように指示するので、問題の行を削除して考えて確認します。

答えて

2

このメソッドは通常、アンダースコアヘルパークラスの配列をラップして、すべてのアンダースコア.jsヘルパメソッドにアクセスできるようにすると思います。この場合、各メソッドはアンダースコアヘルパークラスから来ています。

あなたが言ったように、しかし、これはそれなしでうまくいくはずです。このチュートリアルが書かれたバックボーンのバージョン(v0.3.3)では、モデルの配列が_このように繰り返される必要があるかもしれません。

underscore.js(http://documentcloud.github.com/underscore/)のドキュメントでは、オブジェクト指向のマナーでライブラリを使用する代わりに_()をメソッド呼び出しとして使用する方法について説明しています。

+0

パーフェクト。ありがとう。私はアンダースコアが依存関係であることを完全に忘れていました。私はそれがおそらくバックボーンのことだと思っていました。 –