ember 应用程序初始化后,我需要运行一些代码。我不想调用此代码App.ready
以避免紧密耦合。有这样的东西会很好:
App.on 'ready, -> console.log('do stuff')
但它不会起作用,因为Em.Application
object 是不可订阅的,并且ready
不是真正的事件,尽管文档这么说
ember 应用程序初始化后,我需要运行一些代码。我不想调用此代码App.ready
以避免紧密耦合。有这样的东西会很好:
App.on 'ready, -> console.log('do stuff')
但它不会起作用,因为Em.Application
object 是不可订阅的,并且ready
不是真正的事件,尽管文档这么说
实现此目的的一种简单方法是使用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');
});
示例演示。
希望能帮助到你。
另一种可能是从应用程序的解析回调中调用您的代码。
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 钩子或初始化程序来推迟/提前准备。