Ember.js Catch应用程序';就绪';应用程序外的事件

Ember.js Catch应用程序';就绪';应用程序外的事件,ember.js,Ember.js,我需要在ember应用程序初始化后运行一些代码。我不想从App.ready调用此代码,以避免紧密耦合。有这样的东西会很好: App.on 'ready, -> console.log('do stuff') 但是它不起作用,因为Em.Application对象不可订阅,而且ready不是一个真正的事件,尽管文档这么说了实现这一点的一个简单方法是使用Ember.eventsmixin扩展应用程序类: App = Ember.Application.createWithMixins(Embe

我需要在ember应用程序初始化后运行一些代码。我不想从
App.ready
调用此代码,以避免紧密耦合。有这样的东西会很好:

App.on 'ready, -> console.log('do stuff')

但是它不起作用,因为
Em.Application
对象不可订阅,而且
ready
不是一个真正的事件,尽管文档这么说了

实现这一点的一个简单方法是使用
Ember.events
mixin扩展
应用程序
类:

App = Ember.Application.createWithMixins(Ember.Evented, {
  ready: function() {
    console.log('App ready');
    this.trigger('appReady');
  }
});
您可以在应用程序中的
ready
事件中挂接,并使用
this.trigger(…)

此时,您可以使用(…)在触发事件时收到通知

App.on('appReady', function() {
  console.log('App already ready');
});
例如


希望有帮助。

另一种可能是从应用程序的resolve回调调用代码

App.then(function(app) {
  console.log("App is resolved, so it's ready");
});
从@直觉像素;)窃取的示例

编辑/注释:

App.then()
已被弃用,请参阅:

作为Ember.DeferredMixin弃用的一部分,在 应用程序实例本身已被弃用

您可以使用就绪挂钩或初始值设定项来延迟/提前就绪


同样好的是,我总是忘记这样一个事实,
App
可以:)是的,但是因为我不知道这是不是打算按原样使用,或者这是一个很好的副作用。无论如何,我们的两个解决方案都可以工作,所以这就给了我们选择:)注意:
App.then()
已经被弃用,请参阅