这应该很容易,因为集合中的模型可以轻松获取您需要的信息。您需要在模型周围创建一个“视图模型”包装器,以便您可以获取所需的额外信息。
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,然后使用您需要的任何数据对其进行扩充。您的原始模型永远不会被修改,但项目视图使用的模型具有您需要的数据。