コレクション内のモデルは必要な情報を簡単に取得できるため、これは簡単なはずです。必要な追加情報を取得できるように、モデルの周りに「ビュー モデル」ラッパーを作成する必要があります。
var createViewModel(model){
// inherit from the original model
var vm = Object.create(model);
// override the original `toJSON` method
vm.toJSON = function(){
var json = model.toJSON();
// add the index
json.index = model.collection.indexOf(model);
return json;
}
return vm;
}
このビュー モデルは、itemView によって直接使用されます。
MyItemView = Backbone.Marionette.ItemView.extend({
template: "#my-item-view-template",
initialize: function(){
// replace the model with the the view model
this.model = createViewModel(this.model);
}
});
MyCollectionView = Backbone.Marionette.CollectionView({
itemView: MyItemView
});
以上です。
コレクションをコンストラクターに渡してMyCollectionView
コレクション ビューをレンダリングすると、itemView がインスタンス化されるときに、itemView インスタンスごとに新しいビュー モデルが作成されます。index
テンプレートはモデルからレンダリングできます。
ビュー モデルは元のモデルから直接継承されるため、すべてのメソッドと属性を引き続き使用できます。メソッドをオーバーライドするtoJSON
と、元のモデルから元の json を取得し、必要なデータを追加できます。元のモデルが変更されることはありませんが、アイテム ビューが使用しているモデルには必要なデータが含まれています。