Backbone.Marionette - 具有不同ItemView类的CollectionView

时间:2014-12-16 13:58:16

标签: backbone.js marionette

我希望将@ {1}}应用重新构建到基于Backbone的应用中。但是,现有的观点之一让我很头疼 - 一组不同的子视图。

例如,服务器返回一个列表,其中包含100个条目,50个A类型项目,49个B类型项目和一个C.然后,这些项目在客户端按类型分组,并呈现为一个{{1} }有A个条目,一个Backbone.Marionette用于B条目,一个GroupView用于C. GroupView然后可以展开以显示单个EntryView

我可以构建一个包含三个模型的集合 - 两个GroupView模型(里面有各自的EntryView模型)和一个普通的Group模型。但是,如何告诉集合视图使用Entry呈现Entry模型,GroupView使用Group模型?

1 个答案:

答案 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视图类型的工作方式。