Автоматично стартиране и показване на изглед в рамките на регион върху оформление на Marionette

Имам Layout, с регион. Когато оформлението се инициализира, искам автоматично да инициализира предварително зададен изглед, който да направи в неговия регион, и да го покаже/затвори, когато самото оформление се покаже/затвори.

Актуален пример от 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