我有一个 Marionette 应用程序,它有多个区域。
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
初始化代码移动到可以保留对其引用的 Controller 中,然后在其某个区域中 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();
});
关于javascript - Backbone.Marionette 布局 : Access region. 直接layout.view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21894213/