2014-09-22 1 views
0

У меня есть контроллер, где я начинаю приложение для марионетки и определяю основной регион. Внутри моего основного региона есть mainLayout, который содержит еще два субрегиона, которые я представляю в этих двух субрегионах, но функции onShow/onRender для моего основного элемента не вызываются. :Функция onShow марионетки Layout не набирается

var eventController = my.class{ 
    create: function(){ 
     //This is the model 
     var mainModel = new model(); 

     this.createEventApp = new Backbone.Marionette.Application(); 
     this.createEventApp.addRegions({ 
      //This is the main container 
      mainRegion: ".event-container" 
     }); 

     this.createEventApp.addInitializer(function(options){ 
      var self=this; 
      //This is the main Item View for the app 
      new EventView({ 
       model: mainModel, 
       region: self.mainRegion 
      }); 
     }); 
     this.createEventApp.start(); 
    } 
} 

Теперь мой соответствующий пункт Вид этого приложения, как:

var eventView = Backbone.Marionette.ItemView.extend{ 
    //Template for the item view 
    template: eventViewTemplate; 

    initialize: function(options){ 
     _.bindAll(this); 
     this.model = options.model; 
     this.region = options.region; 

     //Creating a main layout inside mainRegion of the app 
     var myLayout = Backbone.Marionette.Layout.extend({ 
      template: EventViewTemplate, 
      regions: { 
       //Region 1 
       //Region 2 

      } 
     }); 

     this.mainLayout = new myLayout(); 
     this.region.show(this.mainLayout); 
     this.region1view = new region1({ 
      model: this.model 
     }); 
     //same for region 2 

     //showing both the regions in the layout 
     this.mainLayout.region1.show(this.region1view); 
     this.mainLayout.region2.show(this.region2view); 
    }, 

    onShow: function(){ 
     //I want to do something here but this function doesn't event gets called 
    } 

} 

ответ

2

Вы никогда не фактически рендеринга EventView. OnShow метод будет вызван, если вы на самом деле оказывают EventView, делая это в вашем приложении:

var view = new EventView({ 
    model: mainModel 
}); 

this.mainRegion.show(view); 

Если вы хотите, чтобы ваш EventView содержать другой вид, то вы должны сделать его макет. Вероятно, вы можете комбинировать макет и ваш EventView вместе. Если вы не хотите, чтобы ваш eventView отображал что-либо, просто добавьте его в контроллер и поместите функцию onShow в макет.