LayoutView,显示任意数量的视图

时间:2015-01-11 08:02:09

标签: marionette

如果我有一个LayoutView,它定义了两个区域,
myLayout.getRegion('regionA').show(myView1)
myLayout.getRegion('regionB').show(myView2)
这可以。

myView3无法追加,因为myLayout没有第三个区域,模板也没有其他占位符。

如果我想要一个LayoutView(或任何容器)接受任意数量的视图的数组/有序集合,并将它们简单地显示为一个接一个,我该怎么办?

(我认为答案不是CollectionView,因为它需要一个childView和一个模型集合。)

3 个答案:

答案 0 :(得分:1)

如果您将模型附加到视图,答案是CollectionView,它有一个很好的getChildView方法,用于根据项模型的属性查找正确的视图类,请参阅CollectionView docs

如果您不关心模型,那么MultiRegion类的概念将适合您 - 它允许将多个视图附加到单个区域。现在它已经过时了,如果您将其更新为最新的Marionette版本,请随时发送拉取请求

答案 1 :(得分:0)

从官方文件: https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.layoutview.md

  1. 木偶区域,可以定义为函数
  2.   

    可以使用返回的函数在LayoutView上指定区域   具有区域定义的对象。返回的对象遵循   如上所述,定义区域的规则相同。

     Marionette.LayoutView.extend({   // ...
    
       regions: function(options){
         return {
           fooRegion: "#foo-element"
         };   },
    
       // ... });
    
    1. 您可以将Region添加到LayoutView
    2.   

      可以在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();