在应用程序之外捕获应用程序“就绪”事件

时间:2013-09-16 14:27:37

标签: ember.js

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

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

但它不起作用,因为Em.Application对象不可订阅,ready实际上不是一个事件,尽管文档说的是

2 个答案:

答案 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来推迟/提升准备状态。