2015-04-22 2 views
0

У меня проблема при запуске моего приложения ember-cli в режиме производства. Когда я ссылаюсь на App.deferReadiness(), он действует так, как будто приложение не определено.Ссылка на приложение в 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

Я думаю, что это был плохой пример, поскольку «приложение» является вторым аргументом в facebook.coffee initialize. Когда/если я придумаю лучший пример, я обновлю свой вопрос. –

+0

Вы случайно получаете доступ к приложению с тем же именем, что и его глобальное имя? Например. если у вас открыто приложение, и вы заходите в консоль и набираете «MyApp», он даст вам глобальную переменную, которая является экземпляром вашего приложения. Когда вы переходите к производству, это больше не доступно, поскольку все минитируется/сжимается, и это либо превращается в глобальную переменную с одной буквой, либо, возможно, код Ember вообще не делает ее доступной в сборке. Я просто пытался экспортировать приложение из «my_app/app», и у него нет deferReadiness функция вообще - и ее также класс не экземпляр. – jmurphyau

+0

@jmurphyau - это то, что я обнаружил. Я решил свою проблему по-другому. Я удалил все ссылки на 'App'. Области, которые сталкивались с проблемой, были в инициализаторах. При определении инициализатора два аргумента даются инициализатору 'container' и' application'. Это все, что мне действительно нужно. Как только я начал использовать их, я смог избавиться от всех ссылок «App». –

ответ

0

Мне не удалось определить, почему существует разница между режимом разработки и производством, но я смог найти способ обойти эту проблему. Все места, которые я имел в виду App, были в инициализаторах. Инициализаторы получают аргументы container и application. Используя эти аргументы, я смог остановить использование App. В контроллере была еще одна ссылка на App.__container__.lookup (я знаю, что противно). Это было легко исправить с помощью this.container.lookup. Я считаю, что эти изменения решают мою проблему.

Смежные вопросы