残念ながら、Backbone.Marionette モジュールとサブモジュールの起動を理解する際に問題が発生しました。イニシャライザは、1 回ずつ呼び出されるのではなく、複数回呼び出されます。
物事を予見可能な方法で機能させるために何をする必要がありますか?
PP = new Backbone.Marionette.Application();
PP.bind('start', function() {
console.log('application start');
PP.module('Routing').start();
PP.module('Products').start();
});
PP.module('Routing', {
startWithApp: false,
define: function(Routing, PP, Backbone, Marionette, $, _) {
Routing.addInitializer(function() {
console.log('Routing.init');
});
}
});
PP.module('Routing.ProductsRouting', {
startWithApp: false,
define: function(ProductsRouting, PP, Backbone, Marionette, $, _) {
ProductsRouting.addInitializer(function() {
console.log('ProductsRouting.init');
});
}
});
PP.module('Products', {
startWithApp: false,
define: function(Products, PP, Backbone, Marionette, $, _) {
Products.addInitializer(function() {
console.log('Products.init');
});
}
});
$(function() {
PP.start();
});
(コードはJSFiddleとしても利用可能)
上記のコードは、コンソールに次の行を出力します。
- 申請開始
- ルーティング.init
- ProductsRouting.init
- ルーティング.init
- ProductsRouting.init
- Products.init
- Products.init
そして、これは私が期待したものです:
- 申請開始
- ルーティング.init
- Products.init
また、アプリですべてのモジュールを自動的に開始することにした場合 (すべてのモジュールで startWithApp: true を使用し、Routing モジュールと Products モジュールを手動で開始する必要はありません)、出力は次のようになります。
- ルーティング.init
- ProductsRouting.init
- ProductsRouting.init
- Products.init
- 申請開始