Backbone / Marionette CollectionView – 渲染内部模板?
我使用Backbone / Marionette / Moustache很好地渲染了一个集合。
所以PersonModel
和PersonView
工作正常。 PersonView
有一个名为PersonTemplate
的小胡子模板,由我的PeopleCollection
和PeopleCollectionView
完美加载,并在默认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}}
在CompositeView定义中,您可以在我的示例中指定要使用的模板(panelTemplate)。 比指定要用于复合视图所包含的集合中的每个模型的ItemView。 (我的例子中的View.NoteRow)。 比你在模板中定义每个ItemView将进入的容器(我是我的每个ItemViews)