这应该很容易,作为一个集合中的模型可以很容易地获得你需要的信息。您需要在模型周围创建一个“视图模型”包装,以便您可以抓取所需的额外信息。
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从原始模型中取出,然后使用您需要的任何数据对其进行扩充。您的原始模型从不修改,但项目视图使用的模型具有您需要的数据。
目前还不清楚您是否有HTML/CSS问题或JavaScript问题。编辑您的问题并发布相关的JS/Backbone片段。如果你这样做,你会得到更好的答案。如果代码变得太长/深入的帖子片段,也可以做一个小提琴。 – EBarr 2012-08-12 11:33:34
我提炼的问题 – Guy 2012-08-12 11:39:26