我需要在初始化ember应用程序后运行一些代码。我不想从App.ready
调用此代码以避免紧密耦合。有这样的事情会很好:
App.on 'ready, -> console.log('do stuff')
但它不起作用,因为Em.Application
对象不可订阅,ready
实际上不是一个事件,尽管文档说的是
答案 0 :(得分:6)
您可以通过Application
mixin扩展Ember.Evented
课程,这是一种简单的方法:
App = Ember.Application.createWithMixins(Ember.Evented, {
ready: function() {
console.log('App ready');
this.trigger('appReady');
}
});
然后您在应用内的ready
事件中挂钩并使用this.trigger(...)
触发自定义事件
此时,您可以使用.on(...)
在触发事件时收到通知。
App.on('appReady', function() {
console.log('App already ready');
});
示例demo。
希望它有所帮助。
答案 1 :(得分:2)
另一种可能性是从应用程序的解析回调中调用您的代码。
App.then(function(app) {
console.log("App is resolved, so it's ready");
});
来自@intuitivepixel的示例;)http://jsbin.com/AdOVala/66/edit
修改/注意:强>
App.then()
已被弃用,请参阅http://emberjs.com/deprecations/v1.x/#toc_code-then-code-on-ember-application:
作为Ember.DeferredMixin弃用的一部分,在。上使用.then Ember.Application实例本身已被弃用。
您可以使用ready hook或initializers来推迟/提升准备状态。