0

私はJavaScriptとBackbone.jsに傾倒しています。今、私はAddy OsmaniによるBackbone.jsのTodoアプリケーションの例を読んでいて、次のセグメントと混同しています。

// We keep the Todos in sequential order, despite being saved by unordered
// GUID in the database. This generates the next order number for new items.
nextOrder: function() {
    if ( !this.length ) {
        return 1;
    }
    return this.last().get('order') + 1;
},

// Todos are sorted by their original insertion order.
comparator: function( todo ) {
    return todo.get('order');
}

実際、他のどこにも属性は見つかりませんでしたが'order'、誰かがどのように機能するかを指摘できますget('order')か?

4

2 に答える 2

1

nextOrderが呼び出される場所を確認してください。

var Todo = Backbone.Model.extend({
  defaults: function() {
    return {
      title: "empty todo...",
      order: Todos.nextOrder(),
      done: false
    };
  },

ここでモデルの順序を設定しています。既存の注文がない場合は1に設定されます。ある場合は、最後の注文のインデックスがこれまでで最も高くなります。

于 2013-01-03T04:40:55.627 に答える
1

のソースをgetざっと見てみると、参考になります。

get: function(attr) {
  return this.attributes[attr];
}

したがって、あなたが言うとき、Backboneは内部m.get('a')を探します。ここでの大きな教訓は、Backboneモデルの属性とJavaScriptオブジェクトのプロパティは同じものではないということです。つまり、を使用して属性にアクセスしますが、プロパティはを介してアクセスします。属性とプロパティを分離する理由はさまざまですが、主な理由は次のとおりです。'a'm.attributesam.get('a')pm.p

  1. モデル属性の名前がプロパティやメソッドと競合しないようにする必要があります。
  2. モデルのどの部分をサーバーに永続化し、レンダリングのためにテンプレートに送信する必要があるかを知りたいと考えています(注釈付きtoJSONのソースを参照)。

もう1つの教訓は、JavaScriptの基本的な知識があれば、Backboneソースは実際にはかなり読みやすく、かなり理解しやすいということです。注釈付きのソースは、バックボーンの内部を回避する方法がわからない場合に便利です。

于 2013-01-03T04:59:44.680 に答える