2013-06-28 3 views
3

У меня есть макет с областью. Когда макет инициализирован, я хочу, чтобы он автоматически инициализировал предустановленный вид, чтобы сделать его в своей области, и покажите/закройте его, когда сам макет отображается/закрыт.Auto init и показать представление в регионе на марионеточной макет

Текущий пример из https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.layout.md:

AppLayout = Backbone.Marionette.Layout.extend({ 
    template: "#layout-template",  
    regions: { 
    mainRegion: "#menu", 
    content: "#content" 
    } 
}); 

var layout = new AppLayout(); 
ParentAppLayout.show(layout); // Render the Layout to a parent 
layout.mainRegion.show(new SubView()); 

Этот пример показывает, что макет должен быть сначала показано, и после я могу затем INIT и показать вид ребенка. (выше, если я покажу SubView, прежде чем layout будет показан, ничего не произойдет, я полагаю, потому что селектор не существует в DOM?)

Для повторного использования макета, я хочу добавить эту отправку просмотрите представление в самой компоновке, вместо того, чтобы продолжать добавлять его вручную везде, где используется представление. Как это можно достичь?

AppLayout = Backbone.Marionette.Layout.extend({ 
    template: "#layout-template",  
    regions: { 
    mainRegion: "#menu", 
    content: "#content" 
    }, 
    initalize: function() { 
    this.mainRegion.attachView(new SubView()); 
    }, 
    onShow: function() { 
    this.mainRegion.show(this.mainRegion.currentView); 
    } 
}); 

var layout = new AppLayout(); 
ParentAppLayout.show(layout); // Render the Layout to a parent, expecting the child view to also be created automatically 

Этот подход, однако, ничего не делает - ошибок нет.

ответ

5

насчет делать это

AppLayout = Backbone.Marionette.Layout.extend({ 
    template: "#layout-template",  
    regions: { 
    mainRegion: "#menu", 
    content: "#content" 
    }, 
    onShow: function() { 
    this.mainRegion.show(new SubView()); 
    } 
}); 

var layout = new AppLayout(); 
ParentAppLayout.show(); 

В противном случае, если создание SubView дорого вы могли бы сделать это в initialize как этот

initialize: function() { 
    this.subView = new SubView(); 
} 

, а затем использовать его в onShow.