model.ToJSON()
backbone.js とコンパニオン テンプレート エンジンをアンダースコアで使用すると、ほとんどの例で を単に渡すのではなく、レンダリング時に呼び出すことに気付きましたmodel
。テンプレートでデータを取得する方法を変更する必要があることを理解しています。
なぜ、そして toJSON() からどのようなメリットが得られるのか疑問に思っています。
代表例
典型的な例model.toJSON()
では、レンダリング時に呼び出されます。簡潔にするために、テンプレートを文字列リテラルとして入れていることに注意してください。
ToDoItemView = Backbone.View.extend({
/* other viewey stuff */
template : _.template( '<li><%=ToDoNote%></li>'),
render : function () {
var out= this.template(this.model.toJSON()); //<--JSON
$(this.el).html( out) }
return this;
}
}); //end view
別の方法
バックボーン 0.9.2 とアンダースコア 1.3.3 のコードを掘り下げました。バックボーンでは、 が次のことを行うことに気付きましたmodel.toJSON()
: _.clone(this.attributes)
. テンプレート レンダリング エンジン内で、コンパイル済みのテンプレートは、passed-data objという名前を付けます。
これらのスニペットを見て、属性を複製する必要がないことに気付きました。代わりに、モデルを直接渡すことができます (ただし、テンプレートの構文がいくつか変更されています)。何かのようなもの ...
ToDoItemView = Backbone.View.extend({
/* other viewey stuff */
template : _.template( '<li><%=obj.get('ToDoNote')%></li>'), //<--notice GET()
render : function () {
var out= this.template(this.model); //<-- look ma no json
$(this.el).html( result ) }
return this;
}
}); //end view
2 つの例を見ると、toJSON を呼び出す唯一の理由は次のとおりです。
- 悪意のあるビューからモデル データを保護する
- ビューはローカルでデータを変更します (私の意見では良い考えではありません)。
- ビューは、配列/文字列構文を使用して値にアクセスする必要があります(
obj[ namepart + someindex]
)
toJSON()
私の質問は次のとおりです。テンプレートで get() を使用するだけでなく、プロパティのクローンを作成するために呼び出してヒットするのはなぜですか?