2013-09-16 61 views
2

我需要在ember應用程序初始化後運行一些代碼。我不想從App.ready調用此代碼,以避免緊耦合。這將是很好,有這樣的事情:在應用程序外部捕獲應用程序「就緒」事件

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

但它不會工作,因爲Em.Application對象不是可訂閱和儘管文檔這麼說

回答

2

其他可能性可能是從應用程序的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來代替推遲/提前準備就緒。

+0

也不錯,我總是忘記'App'然後能夠:) – intuitivepixel

+0

是的,但是因爲我不知道這是爲了按原樣使用,還是因爲它是一個很好的副作用。無論如何,我們的解決方案工作,所以這給了選擇:) –

+0

注意:'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

6

一個簡單的方法,你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

希望它有幫助。

+0

啊。尼斯!那麼簡單 – H1D

相關問題