我正在尝试渲染视图的主干集合。该集合可以是任何类型的牵线木偶视图(layoutView,CompositeView,collectionView,ItemView)。当我尝试渲染时,我会为每个呈现的视图获得“[object Object]”。这让我相信,当它从集合中抓取一个视图时,它不知道要呈现哪个视图。我现在开始在CollectionView中使用getChildView()来假设渲染视图集合,但我不确定如何指定我想要孩子的视图类型。
新的Marionette和在线资源似乎很渺茫(也许我在查找错误?)我想在视图中查看视图(子视图?不是必需的子视图)但不必使用LayoutView并且必须指定区域子视图的数量可能会有所不同,而只需要一个collectionView呈现marionetteViews的集合,无论有多少。
谢谢你的时间,
答案 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放入其中一个区域并显示它。