1

バックボーンを学習中ですが、すべての構文を理解していません。以下に、バックボーンを学習するために取り組んできたコードの一部を入れて、この質問で参照できるようにします。バックボーンがどのように機能するかはほとんど理解できますが、一部のコードのいくつかのマーキングの背後にある意味がよくわかりません。BackBone のドキュメントのソースはせいぜい不足しています。私はそれの90%を取得しますが、取得できない構文は、アンダースコア「_」が実際に提供するものと、それをいつ使用するかです。たとえば、以下のコードでは、".bindAll( .... " でアンダースコアを使用しています。もちろん、バインディングが何であるかは理解しています。アンダースコアをいつ使用するか、およびマーキングがどのような役割を果たしているのかはわかりません。別の例は次のとおりです。アンダースコアが '(this.collection.

(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);
4

4 に答える 4

3

アンダースコアは、効率的なクロスブラウザであるユーティリティ/便利な関数のコレクションにすぎません。アンダースコアの各機能は、アンダースコア文字_(したがってアンダースコアという名前)で始まります。

(強調鉱山)

アンダースコアはJavaScriptのユーティリティベルトライブラリであり、Prototype.js(またはRuby)で期待される多くの関数型プログラミングサポートを提供しますが、組み込みのJavaScriptオブジェクトを拡張することはありません。これは、jQueryのタックスとBackbone.jsのサスペンダーと一緒に行くためのネクタイです。

バックボーンにも独自の関数セットが含まれている可能性がありますが、必要なユーティリティ関数はすでにアンダースコアに存在するため、バックボーンによって代わりに使用されます。言い換えると、アンダースコアと組み合わせたバックボーンは、プログラミング/機能のニーズにおいてより強力で柔軟性を提供します。

バックボーンとアンダースコアの両方が同じ作成者によって作成されていることに注意してください。

ドキュメントでもっと読む:

http://underscorejs.org/

于 2012-06-29T19:33:32.760 に答える
0

アンダースコアはそれ自体がライブラリであり、Backboneがそのソースでたまたま利用しています。そのAPIは_、オブジェクトである名前空間に完全に含まれています。

アンダースコアは主に、データレベルでのJavaScriptのネイティブAPIの拡張に関係しています。つまり、DOM操作(つまり、jQueryが専門とするもの)よりも、たとえば交差する配列のメソッドに関心があります。

また、Backboneが利用するテンプレートシステムもあります。

于 2012-06-29T19:34:28.083 に答える
0

Underscore.jsの作成者であるDocumentCloudによって作成されたjavascriptユーティリティライブラリですBackbone.js

Backbone.jsの外部で配布可能として利用できるため、独自の名前空間があります。

これは、必ずしもすべてのブラウザーでネイティブにサポートされているとは限らないさまざまな関数型言語構造へのインターフェースを提供することにより、開発者を支援します。

Underscore.jsドキュメント

例えば:

bindAll_.bindAll(object, [*methodNames]) 

methodNamesで指定されたオブジェクト上のいくつかのメソッドをバインドして、呼び出されるたびにそのオブジェクトのコンテキストで実行されるようにします。イベントハンドラーとして使用される関数をバインドするのに非常に便利です。そうしないと、かなり役に立たないこれで呼び出されます。methodNamesが指定されていない場合、オブジェクトのすべての関数プロパティがそれにバインドされます。

于 2012-06-29T19:36:23.950 に答える
0

アンダースコアは多かれ少なかれ、便利なユーティリティ関数の名前空間と考えるのが最善です。彼らはアンダースコアを使用して、グローバル名前空間を汚染しないようにしました。

これ以上の情報については、ドキュメントを読むのが最善です:アンダースコア

特に、あなたが引っかかっていると思われる使用法は連鎖中です

于 2012-06-29T19:33:23.467 に答える