有没有办法在Marionette CollectionView中创建一个独特的视图?我的意思是这样的:
的CollectionView
通过唯一,我的意思是“Start ItemView”必须使用唯一的模板,而不是与常规ItemViews相关联的方法。
我尝试过的事情:
将开始视图添加到CollectionView的el之前是不可取的,因为我的CollectionView的方法会对其子视图起作用。
在Marionette文档中,建议在这种情况下覆盖buildItemView(我认为?)。我不知道如何覆盖它。只是调用buildItemView不起作用,因为StartView没有关联的模型或任何选项。好像我不能把这些args留下来,或者它只是返回undefined。
我无法在CollectionView的模板中包含StartView的标记,因为... Marionette CollectionViews无法使用模板。
从Marionette文档中,它似乎不适合CompositeView的用例。但也许我错了。
我可能错过了一些相当明显的东西。在此先感谢您的帮助。
编辑:格式化
答案 0 :(得分:5)
创建2个不同的视图,'StartView'和'NormalView':
StartView = Marionette.ItemView.extend({
template:"#start-template'
});
NormalView = Marionette.ItemView.extend({
template:"#normal-template"
});
在你的集合视图中,覆盖getItemView并返回你的'StartView'和'NormalView'......就像这样:
MyCollectionView = Marionette.CollectionView.extend({
getItemView:function(item){
if(item.get("ImTheFirst")===true)
return StartView;
else
return NormalView;
}
});
在集合中的第一项上,添加属性“ImTheFirst”(例如)并将其设置为true。
答案 1 :(得分:2)
您在这里寻找的是CompositeView
。 CompositeView
是ItemView
和CollectionView
之间的混搭。基本上,CompositeView
本身将作为您的StartView
,然后您定义一个ItemView作为您的“常规项目视图”。
像这样:
RegularItemView = Backbone.Marionette.ItemView.extend({
template: "#regular-itemview-template"
});
CompositeView = Backbone.Marionette.CompositeView.extend({
itemView: RegularItemView,
template: "#start-template"
});