2015-04-22 74 views
0

在生產模式下運行我的ember-cli應用程序時遇到問題。當我參考App.deferReadiness()它就像App未定義一樣。在ember-cli中引用應用程序

應用程序/ app.coffee

`import Ember from 'ember'` 
`import Resolver from 'ember/resolver'` 
`import loadInitializers from 'ember/load-initializers'` 
`import config from './config/environment'` 

App = Ember.Application.extend 
    modulePrefix: config.modulePrefix 
    podModulePrefix: config.podModulePrefix 
    Resolver: Resolver 
    ready: -> 
    Ember.debug "Total setup time: #{(new Date).valueOf() - startTime.valueOf()}ms" 

loadInitializers(App, config.modulePrefix) 

`export default App` 

應用程序/初始化/ facebook.coffee

`import App from 'my_app/app'` 
initialize = (container, application) -> 
    # Results in: t.default.deferReadiness is not a function 
    App.deferReadiness() 
    # omitted code 

這個工作在發展模式很好,但事情到了生產。有任何想法嗎?

+0

我認爲這是一個糟糕的例子,因爲'application'是facebook.coffee初始化中的第二個參數。當/如果我想出一個更好的例子,我會更新我的問題。 –

+0

您是否偶然使用與其全球名稱相同的名稱訪問應用程序?例如。如果你已經打開了你的應用程序,然後進入控制檯並輸入'MyApp',它會爲你提供一個全局變量,這是你的應用程序實例 - 當你移動到生產環境時,由於一切都被縮小/壓縮,要麼變成一個單字母的全局變量,要麼Ember代碼可能在生產版本中根本不可用。我剛剛嘗試從'my_app/app'導出應用程序,但它沒有延遲註釋功能在所有 - 它也是一個類不是實例.. – jmurphyau

+0

@jmurphyau,這也是我發現的。我以另一種方式解決了我的問題我刪除了所有對「App」的引用。遇到問題的領域是在初始化程序中。當定義一個初始化器時,兩個參數被賦予初始化器'container'和'application'。這就是我真正需要的。一旦我開始使用這些,我就可以擺脫所有'App'引用。 –

回答

0

我無法確定爲什麼開發模式和生產之間存在差異,但是我能夠找到解決該問題的方法。我所指的App的所有地方都在初始化程序中。初始化器接收參數containerapplication。通過使用這些論點,我能夠停止使用App。在控制器中有更多的參考App.__container__.lookup(我知道討厭)。這很容易與this.container.lookup解決。我相信這些更改可以解決我的問題。