読者です 読者をやめる 読者になる 読者になる

Backbone Marionette のApplication とModuleの起動順

イシュー

  • Marionette で、以下の2つはどうやって解決するか?
    • Application を new しないと Moduleが定義できない
    • Module を定義しないと、ApplicationからModuleをStartできない

参考

アプリケーションの起動順序を以下で制御する

  • 1 . ModuleのstartWithParent属性を false にして、Application に引きずられて起動しないようにする
  • 2 . Moduleのstartイベントを監視し、moduleが起動したら、controllerとrouterをインスタンス化するように設定
  • 3 . Applicationをインスタンス化(new)後にModuleを名前付きで定義
var myModule = myApp.Marionette.Module('MyModule', function(MyModule, App){

  MyModulet.Router= Marionette.Controller.extend({
  });
  MyModulet.Controller = Marionette.Controller.extend({
    start: function() {
      console.log('Marionette.Controller start');
    }
  }

  this.startWithParent = false;
  this.on('start', function() {
    var controller = new MyModulet.Controller();
    controller.router = new MyModule.Router({
      controller: controller
    });      
    controller.start();
  });

})
  • 4 . Applicationのstartイベントを監視し、start時に名前を付けたModule で、Moduleのstartメソッドをコール
myApp.on('start', function () {
    myModule.start();
  });