Another thing I did was use Em.StateManager for bootstrap.
App.Loader = Em.StateManager.create({ start: Em.State.create({ enter: function(mgmt, ctx) {
Since you use create instead of continuing, the object will be instantly created. If you define a state called start , it will be recognized as the default initial state (or you can specify another by name). Thus, the new StateManager object immediately enters the initial state, and when the StateManager enters the new state, it will always look for a way to enter this state and start it, if any.
The state manager is a natural place to initialize your application, because the object provides ways for you to follow the micro-level execution order during the async boot process, without confusing yourself in too many callbacks.
tborg source share