如何渲染不同木偶视图的集合

时间:2015-07-16 17:36:07

标签: backbone.js views marionette subviews

我正在尝试渲染视图的主干集合。该集合可以是任何类型的牵线木偶视图(layoutView,CompositeView,collectionView,ItemView)。当我尝试渲染时,我会为每个呈现的视图获得“[object Object]”。这让我相信,当它从集合中抓取一个视图时,它不知道要呈现哪个视图。我现在开始在CollectionView中使用getChildView()来假设渲染视图集合,但我不确定如何指定我想要孩子的视图类型。

新的Marionette和在线资源似乎很渺茫(也许我在查找错误?)我想在视图中查看视图(子视图?不是必需的子视图)但不必使用LayoutView并且必须指定区域子视图的数量可能会有所不同,而只需要一个collectionView呈现marionetteViews的集合,无论有多少。

谢谢你的时间,

1 个答案:

答案 0 :(得分:1)

所以经过几天的实验,完全将这种方法留给另一个(Does a CollectionView's childView have to be an ItemView?),然后再回到它。我觉得好像我已经弄明白了。

这种方法用于在集合/复合视图下嵌套多个MarionetteView,所以让我们使用一个可以有任意数量的面板的列的示例

首先,我们为列

创建一组视图
//These exist in the view...
class PanelView1 extends Marionette.CompositeView
...
class PanelView2 extends Marionette.ItemView
...


columnPanelCollection = new ColumnPanelCollection([
        index: 1,   view: PanelView1, data: dataForPanelView1Collection
    ,
        index: 2,   view: PanelView2 , data: null
    ])

因此,我们为列(columnPanelCollection)创建一个集合,将MarionetteView的类型(而不是实例)传递给视图:'视图中的PanelView1和PanelView2:'属性。还可以在“数据&#39:”属性

中传递集合中可能需要的任何数据

现在我们将刚创建的集合放入CollectionView

columnCollectionView= new ColumnCollectionView(
        collection: columnPanelCollection 
    )
在ColumnCollectionView类中,我们使用回调

getChildView:(model)->
    return model.get('view')

我们会返回'视图:'属性是我们想要创建的视图类型,这将基于该类型创建子视图。然后在childView的类(所以PanelView1或PanelView2类)中,我们可以使用onShow回调并根据'数据为该视图设置一个集合:'我们提供的属性

class PanelView1 extends Marionette.CompositeView
...
template: ....
collection: new PanelDataCollection()

onShow:(view)->
    modelCollection = view.model.get("data").models 
    @collection.reset(modelCollection) if modelCollection

旁注:仍然必须在PanelView类中指定一个集合属性,这就是为什么我将它初始化为一个新的PanelDataCollection()',然后将它设置为onShow

然后我们可以使用LayoutView并将columnCollectionView放入其中一个区域并显示它。