2

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

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

但它不会起作用,因为Em.Applicationobject 是不可订阅的,并且ready不是真正的事件,尽管文档这么说

4

2 回答 2

6

实现此目的的一种简单方法是使用mixin扩展您的Application类: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');
});

示例演示

希望能帮助到你。

于 2013-09-16T14:37:37.867 回答
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 弃用的一部分,在 Ember.Application 实例本身上使用 .then 已被弃用。

您可以使用 ready 钩子或初始化程序来推迟/提前准备。

于 2013-09-16T16:14:23.830 回答