Backbone.Marionette布局:直接访问region.layout.view

时间:2014-02-19 22:42:49

标签: javascript backbone.js marionette

我有一个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( '#...')

1 个答案:

答案 0 :(得分:0)

而不是在应用初始值设定项中,将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();
});