4

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

现在,我成功地将布局发送到 CollectionView (在它自己的区域中),如下所示:

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

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

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

有人对这个有经验么?


编辑: 好的,所以我找到了使用 Marionette 附带的 Backbone.BabySitter 的提示——从这个文档中讨论了 CollectionView 的孩子。所以现在我的代码看起来像这样。

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');
});

主干视图实例正在被记录,所以我想我在这里做点什么。谁能告诉我如何从这一步操作区域?

4

2 回答 2

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 视图传递给 Layout 而不是 ItemView,然后循环遍历“视图”并将新视图传递到区域中。

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

于 2013-04-19T12:33:40.157 回答
1

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

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而模型只能传递给其中一个子视图。

于 2014-04-07T08:26:09.027 回答