Автоматическая инициализация и отображение вида в пределах области на макете марионетки

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

Текущий пример из 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());

В этом примере показано, что сначала должен быть показан макет, и после я могу инициализировать и показать дочернее представление. (выше, если я покажу 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

Однако этот подход тоже ничего не делает - никаких ошибок.


person simbolo    schedule 28.06.2013    source источник


Ответы (1)


Как насчет этого

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.

person Alberto Zaccagni    schedule 28.06.2013