通过CollectionView(木偶/骨干)传递布局(和操纵区域)

时间:2013-04-19 11:44:31

标签: javascript backbone.js marionette backbone-views

我正在尝试将布局传递给CollectionView,然后操纵其中的区域。

现在,我已成功将一个布局发送到CollectionView(位于其自己的区域中),如下所示:

main_layout.main_region.show(new CollectionView({
   itemView: ALayout,
   collection : someCollection
}));

然后我可以看到布局正在渲染。但是,我无法找到修改(甚至触摸)'ALayout'中的区域的方法。有没有办法做到这一点?最后,我试图获得一个“窗格”的集合,每个窗格内部都有相同的区域,并以某种方式绘制这些区域。

另外,我最初只是将ItemView传递给CollectionView,但我可以找到一种方法将区域添加到ItemView中。如果可能的话,我想在我传递的文件中控制这些区域(无论是布局还是ItemView)。

有没有人有这方面的经验?


修改 好的,所以我发现使用Marionette附带的Backbone.BabySitter提示 - 从这个文档中可以看到CollectionView的孩子here。所以现在我的代码看起来像这样。

var collectionViewToUse = new CollectionView({
    itemView: ALayout,
    collection : someCollection
});

main_layout.main_region.show(collectionViewToUse);

collectionViewToUse.children.each(function(view) {
  console.log(view);
  //This fails.
  view.regionManagers.someRegion.show('HHHHHH');
  //So does this, if I run it instead
  view.someRegion.show('Anything');
});

骨干视图实例正在记录,所以我想我在这里做些什么。任何人都可以告诉我如何从这一步操纵区域吗?

2 个答案:

答案 0 :(得分:4)

好的,我想我有这个问题的答案。希望这对未来的其他人有所帮助!

答案是在使用BabySitter的道路上。您基本上实例化CollectionView,然后使用BabySitter循环遍历它并对每个视图执行某些操作。所以如果你传递一个布局:

var collectionViewToUse = new CollectionView({
    itemView: ALayout,
    collection : someCollection
});

main_layout.main_region.show(collectionViewToUse);

collectionViewToUse.children.each(function(view) {
   view.someRegion.show(new SomeView({model : view.model });
});

基本上,你可以传递Collection视图而不是ItemView,然后遍历'views'并将新视图传递到区域。

请评论任何改进,或者这对其他人有任何帮助!

答案 1 :(得分:1)

我通过将逻辑封装在Collection本身而不是从外部修改它,发现了对这种模式的轻微修改。

var collectionViewToUse = new CollectionView({
    itemView: ALayout,
    collection : someCollection,

    onBeforeItemAdded: function(view) {
        view.on('show', function() {

            view.someRegion.show(
                new SomeView({
                    model : view.model // view.model is model of Layout
                })
            );

        });
    }
});

main_layout.main_region.show(collectionViewToUse);

所有发布的答案都会被model附加到Layout,而模型只会传递给其中一个子视图。