我希望将@ {1}}应用重新构建到基于Backbone
的应用中。但是,现有的观点之一让我很头疼 - 一组不同的子视图。
例如,服务器返回一个列表,其中包含100个条目,50个A类型项目,49个B类型项目和一个C.然后,这些项目在客户端按类型分组,并呈现为一个{{1} }有A个条目,一个Backbone.Marionette
用于B条目,一个GroupView
用于C. GroupView
然后可以展开以显示单个EntryView
。
我可以构建一个包含三个模型的集合 - 两个GroupView
模型(里面有各自的EntryView
模型)和一个普通的Group
模型。但是,如何告诉集合视图使用Entry
呈现Entry
模型,GroupView
使用Group
模型?
答案 0 :(得分:4)
您可以覆盖CollectionView.getChildView
以确定父集合中每个模型使用哪种子视图类型。
假设您的Model
类型有一个名为isGroup
的方法,如果模型为Group
,则返回真值,否则返回虚假:
var HeterogenousCollectionView = Marionette.CollectionView.extend({
getChildView: function(model) {
if(model.isGroup()) {
return GroupView;
} else {
return EntryView;
}
}
})
有关详细信息,请参阅Marionette docs。我还建议浏览annotated source code - 它足够简洁,可以很好地了解Marionette视图类型的工作方式。