我正在尝试将布局传递给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');
});
骨干视图实例正在记录,所以我想我在这里做些什么。任何人都可以告诉我如何从这一步操纵区域吗?
答案 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
,而模型只会传递给其中一个子视图。