如果我有一个LayoutView,它定义了两个区域,
myLayout.getRegion('regionA').show(myView1)
myLayout.getRegion('regionB').show(myView2)
这可以。
myView3无法追加,因为myLayout没有第三个区域,模板也没有其他占位符。
如果我想要一个LayoutView(或任何容器)接受任意数量的视图的数组/有序集合,并将它们简单地显示为一个接一个,我该怎么办?
(我认为答案不是CollectionView,因为它需要一个childView和一个模型集合。)
答案 0 :(得分:1)
如果您将模型附加到视图,答案是CollectionView,它有一个很好的getChildView方法,用于根据项模型的属性查找正确的视图类,请参阅CollectionView docs
如果您不关心模型,那么MultiRegion类的概念将适合您 - 它允许将多个视图附加到单个区域。现在它已经过时了,如果您将其更新为最新的Marionette版本,请随时发送拉取请求
答案 1 :(得分:0)
从官方文件: https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.layoutview.md
可以使用返回的函数在LayoutView上指定区域 具有区域定义的对象。返回的对象遵循 如上所述,定义区域的规则相同。
Marionette.LayoutView.extend({ // ...
regions: function(options){
return {
fooRegion: "#foo-element"
}; },
// ... });
可以在LayoutView实例中根据需要添加和删除区域。 使用以下方法:
addRegion addRegions removeRegion
因此,在显示新元素
之前,您可以将布局添加到布局试试这个:
layout.addRegion("region1", "#region1");
layout.$el.append("<div id='region1'/>");
layout.region1.show(panelView);
它对我有用
答案 2 :(得分:0)
在花了几天时间尝试编写一个接受任意数量视图的LayoutView之后,我已经做到了,但后来找到了Backbone Babysitter,这很整洁。
new Backbone.ChildViewContainer();