我需要在ember應用程序初始化後運行一些代碼。我不想從App.ready
調用此代碼,以避免緊耦合。這將是很好,有這樣的事情:在應用程序外部捕獲應用程序「就緒」事件
App.on 'ready, -> console.log('do stuff')
但它不會工作,因爲Em.Application
對象不是可訂閱和儘管文檔這麼說
我需要在ember應用程序初始化後運行一些代碼。我不想從App.ready
調用此代碼,以避免緊耦合。這將是很好,有這樣的事情:在應用程序外部捕獲應用程序「就緒」事件
App.on 'ready, -> console.log('do stuff')
但它不會工作,因爲Em.Application
對象不是可訂閱和儘管文檔這麼說
其他可能性可能是從應用程序的resolve回調調用您的代碼。
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實例本身已經棄用。
您可以使用ready hook或initializers來代替推遲/提前準備就緒。
一個簡單的方法,你ready
是不是一個真正的事件能實現,這將是與Ember.Evented
混入擴展您的Application
類:
App = Ember.Application.createWithMixins(Ember.Evented, {
ready: function() {
console.log('App ready');
this.trigger('appReady');
}
});
你勾ready
事件中你的應用程序中,並觸發您的自定義事件USI ng this.trigger(...)
此時您可以使用.on(...)
在事件觸發時得到通知。
App.on('appReady', function() {
console.log('App already ready');
});
示例demo。
希望它有幫助。
啊。尼斯!那麼簡單 – H1D
也不錯,我總是忘記'App'然後能夠:) – intuitivepixel
是的,但是因爲我不知道這是爲了按原樣使用,還是因爲它是一個很好的副作用。無論如何,我們的解決方案工作,所以這給了選擇:) –
注意:'App.then()'已被棄用,請參閱[http://emberjs.com/deprecations/v1.x/#toc_code-then-code- on-ember-application](http://emberjs.com/deprecations/v1.x/#toc_code-then-code-on-ember-application) – t0r0X