我使用Marionette 3.0。
我有BlockView可能有不同数量的区域。 这些区域填充了BlockRegionViews,它们是CollectionViews(它们将在2.x中)并且这些视图渲染了更多的BlockView。 我想编写一个函数来创建一个BlockView,它的区域已经填充了(空)BlockRegionViews,而不是返回这个BlockView。
所以我写了这段代码:
var blockView = new BlockView({model: blockModel});
var regions = blockModel.get('regions')
for(var i in regions) {
var blockRegionModel = regions[i];
var blockRegionView = new BlockRegionView({model: blockRegionModel});
blockView.addRegion(blockRegionModel.get('position'), '...regiondefinition...');
var region = blockView.getRegion(blockRegionModel.get('position'));
// This is the line where i get the error.
region.show(blockRegionView);
}
return blockView;
当然我的代码很糟糕。即使是show function的名字也表明它对我来说不是正确的功能(因为我现在不想显示任何观点),但是我找不到类似的东西。这在文档中。
所以我的问题是:我应该如何构建一个视图,并在其区域中初始化其他视图而不渲染任何视图?
答案 0 :(得分:0)
如果我理解正确,你想在视图中渲染视图,而不是渲染任何东西,直到它们全部被初始化。
您的描述中的blockModel和区域处理有点令人困惑,所以我希望您可以将其应用到您的案例中。
围绕a View's lifecycle的文档很有帮助。
var ChildView = Mn.View.extend({..});
var ParentView = Mn.View.extend({
template: //..,
onBeforeRender: function() {
this.showChildView('reg1', new ChildView({model: someModel}));
},
regions: {
reg1: //..
}
});
在上面的示例中,ChildView
将被实例化,并在ParentView
呈现之前附加到ParentView
。但是,当呈现ParentView
时,ChildViews
将被实例化并在其区域中呈现。
你提到你不想渲染任何东西。这是一种罕见的情况,但您可以在任何渲染事件之外实例化子视图。
var ChildView = Mn.View.extend({..});
var ParentView = Mn.View.extend({
template: //..,
initialize: function() {
this.childView = new ChildView({model: someModel});
},
// You can decide whenever you want to show the childView
// and invoke this method.
showTheChildView: function() {
this.getRegion('reg1').show(this.childView);
},
regions: {
reg1: //..
}
});
希望我能正确理解你的问题。