我有一个木偶应用程序,该应用程序超过1个区域。
App.addRegions({
pageRegion: '#page',
contentsRegion :'#contents'
});
作为App.pageRegion的一部分,我添加了一个布局。
App.ConfiguratorLayout = Marionette.Layout.extend({
template: '#configurator-page',
regions: {
CoreConfiguratorRegion: '#Core-Configurator-Region',
SomeOtherRegion:'#someOtherregion'
}
});
在应用程序启动之前呈现此布局。
App.addInitializer(function() {
var configLayout = new App.ConfiguratorLayout();
App.pageRegion.show(configLayout);
});
稍后在应用程序中,我只需要更改configLayout的内容。
我正在努力实现这样的目标。
App.pageRegion.ConfiguratorLayout.CoreConfiguratorRegion.show(someOtherLayout);
除了在App.pageRegion的$ el上使用DOM选择器之外,还有其他方法可以做到这一点。
App.pageRegion。$ el.find('#...')
最佳答案
代替在应用程序初始化程序中,将configLayout
初始化代码移动到可以保留对其引用的控制器中,然后在其区域之一中添加show()
某些内容。
// pseudocode:
ConfigController = Marionette.Controller.extend({
showConfig: function() {
var layout = new App.ConfiguratorLayout();
App.pageRegion.show(configLayout);
var someOtherLayout = new App.CoreConfiguratorLayout();
layout.coreConfiguratorRegion.show(someOtherLayout);
// ... maybe create and show() some views here?
}
});
App.addInitializer(function() {
var controller = new ConfigController();
// more likely this would be bound to a router via appRoutes, instead of calling directly
controller.showConfig();
});