Backbone / Marionette CollectionView – 渲染内部模板?

我使用Backbone / Marionette / Moustache很好地渲染了一个集合。

所以PersonModelPersonView工作正常。 PersonView有一个名为PersonTemplate的小胡子模板,由我的PeopleCollectionPeopleCollectionView完美加载,并在默认tagname: "div"内呈现。

但是,我想在另一个模板中渲染这个集合,所以我可以在那里放置一些标题。

现在它基本上是:

 
John
Dave

但我希望它是:

 

People

John
Dave

我知道我可以在事后用jQuery添加这些项目,但我希望避免这种情况,因为我的实际CollectionTemplate比这里给出的例子复杂得多。

CompositeView正是您所需要的。 以下是我为简单备注面板设置CompositeView的方法。

每个笔记的项目视图:

 View.NoteRow = Marionette.ItemView.extend({ template: Handlebars.compile(rowTemplate), tagName: "tr", className: "row-item", }) 

综合视图:

  View.NotesPanel = Marionette.CompositeView.extend({ template: Handlebars.compile(panelTemplate), itemView: View.NoteRow, itemViewContainer: "tbody", className: "panel panel-default button-panel notes-panel", events: { "click button#add-note" : "addNote" } }) 

现在模板:

panelTemplate:

 

Notes

User Note

和行模板:

 {{employee_id}}  

{{note_text}}

{{humanize created_at}}

在CompositeView定义中,您可以在我的示例中指定要使用的模板(panelTemplate)。 比指定要用于复合视图所包含的集合中的每个模型的ItemView。 (我的例子中的View.NoteRow)。 比你在模板中定义每个ItemView将进入的容器(我是我的每个ItemViews)