モジュールの読み込みにrequire.jsを使用し、アプリケーションの構造化と機能を支援するためにマリオネットを使用してバックボーンアプリを構築しています。次のように、イベントアグリゲーターのrequireモジュールをセットアップしました:-
define(['backbone', 'marionette'],function(Backbone, Marionette){
var ea = new Backbone.Wreqr.EventAggregator();
ea.on('all', function (e) { console.log("[EventAggregator] event: "+e);});
return ea;
});
私はそれを他のrequireモジュールに渡し、中央のイベント処理およびメッセージングコンポーネントとして機能させることを望んでいましたが、これである程度成功しています。次のように、ベントを依存関係として他のモジュールに問題なく渡すことができます:-
define(['marionette', 'text!templates/nav.html', 'shell/vent'], function (Marionette, text, vent) {
return SplashView = Marionette.ItemView.extend({
template : text,
events : {
'click #splashContinueButton': 'onButtonClick'
},
onButtonClick : function(evt) {
vent.trigger('onSplashContinueClick');
}
});
});
私が抱えている問題は、すべてのイベントがアプリのさまざまな場所でトリガーされているにもかかわらず (コンソール ログで確認できます)、アプリの一部でイベントをリッスンできないことです。たとえば、次のようなイベントを取得しようとしている Marionette モジュール (require モジュールとして実行時に読み込まれる) があります。
var SplashModule = shellApp.module("SplashModule");
SplashModule.addInitializer(function(){
vent.on("onSplashModelLoaded", this.onSplashModelLoaded);
vent.on("onSplashContinueClick", this.onSplashContinueClick);
}
この場所からベントをログに記録しても、オブジェクトとして見ることができますが、何も得られません。ログには、アプリの他の部分がリッスンしている他のイベントではなく、実際にはルート レベルのアプリケーションによってリッスンされているイベントのみが含まれる一連のイベントが含まれています。そして、ここで私の理解が破綻します。私は、イベント アグリゲーターをアプリケーション構造全体のグローバルな通信およびメッセージング システムとして使用できると考えていました。何が起こっているのかについて誰か洞察を教えてください。
どうもありがとう、
サム
*更新/編集/解決策*
こんにちは、まあ、私は今それを機能させています(上記を投稿してからわずか5分-doh!)。基本的に、モジュールの初期化イベントにリスナーを追加するのは時期尚早でした (私が知る限り)。関数のチェーンに沿ってそれらをさらに移動したところ、すべてが期待どおりに動作するようになりました.