Backbone Marionette のApplication とModuleの起動順
イシュー
- Marionette で、以下の2つはどうやって解決するか?
- Application を new しないと Moduleが定義できない
- Module を定義しないと、ApplicationからModuleをStartできない
参考
- Module - Marionette.js Documentation
- Module - Marionette.js Documentation
- JavaScript - Marionette.jsまとめ その1 Application, Controller, AppRouter - Qiita
- 【Marionette.js】Module, Controller, Layout, Region, ItemViewを用いたサンプル - Tech Design
- JavaScript - Marionette.jsまとめ その1 Application, Controller, AppRouter - Qiita
- 起動順およびinitialize の割り込み方法が記載されている
- addRoutersで呼び出すのはcontrollerに指定したオブジェクトのメソッド
- つまりrouter と controllerは完全に一体
- Module毎にrouterを設定することにより、Moduleごとのcontrollerを定義できる
アプリケーションの起動順序を以下で制御する
- 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(); });