I am in the following situation.
I am using requireJs to loads module and I don\'t want to use global variables.
The main.js is responsible to load the router.
In my project, I use the following dependency: main.js -> app -> router -> subApp.
In app.js, I create a single global variable that holds a pointer to my app:
define([...], function(...) {
return {
initialize: function() {
window.MyApp = new Backbone.Marionette.Application();
// ...
MyApp.start();
}
};
});
This makes it extremely easy to access my app's regions from anywhere, as well as store global state information in one name space.
I tried doing it without the global app at first, but eventually gave up and found this approach to be a lot more flexible.
the schema:
main.js -> router -> app -> subApp -> router
is right.
If you are using backbone.marionette, in order to access the router from the app and subApp, without using global var
, you should start the app in router in this way:
// router.js
YourApp.start(router: router);
// app.js
YourApp.addInitializer(function(options){
// do useful stuff here
var myView = new MyView({
router: options.router
});
YourApp.mainRegion.show(myView);
});
Subapp can raise events which router handles rather than having an explicit dependency on router