我有一个木偶应用程序,该应用程序超过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();
});

09-25 19:53