2014-10-24 2 views
3

Я конвертирую приложение Ember в реальном времени на основе глобальных приложений в приложение на основе es6, которое использует ember-cli. В моем приложении мне нужно знать текущий маршрут довольно часто. В версии globals я делал это.ember-cli App.get/App.set throw undefined

Глобалы Pattern

var MyApp = Ember.Application.create({ 
    currentRoute : '' 
}); 

MyApp.Route = Ember.Route.extend({ 
    actions : { 
     didTransition : function() { 
      MyApp.set('currentRoute', this); 
     } 
    } 
}); 

я мог тогда сделать MyApp.get('currentRoute') из моей сессии или автономных контроллеров при определении того, как/где переход при возникновении определенных событий.

При использовании ember-cli я импортирую приложение, чтобы иметь возможность ссылаться на него с помощью необходимых контроллеров.

import MyApp from "../app"; 

Но оказывается, что MyApp.currentRoute, MyApp.get и MyApp.set являются всеми неопределенной.

Часть меня думает, что это ошибка в ember-cli, что экземпляр приложения больше не имеет привязки и сеттеры. Часть меня понимает, что не слишком хорошо хранить вещи в экземпляре приложения.

я мог бы обойти эту проблему путем преобразования всех экземпляров MyApp.get и MyApp.set к Ember.get(MyApp, ...) и Ember.set(MyApp, ...) соответственно, но я думал, что спросить здесь первый, так как это, кажется, либо проблема с Эмбер-Cli или еще что-то, где есть лучше рекомендуемый способ добиться того, что мне нужно.

+2

Вам не нужно больше myapp.stuff при использовании интерфейса командной строки, а не экспортировать Ember.route.extend ({// ваш код}), а вместо MyApp.set используйте this.set –

+0

Единственное, что вам нужно будет импортировать: ember, 'import Ember from 'ember';' [ping me in chat] (http: //chat.stackoverflow .com/rooms/63494/ember-js), если вам нужна помощь в ее миграции –

+0

У меня также есть эта проблема. Я переношу приложение для набора ember-starter в ember-cli, и у меня есть следующая проблема: я использовал для хранения информации о текущем пользователе в свойстве объекта App. Поэтому я использовал 'App.get ('currentUser')' во всем приложении и 'App.set ('currentUser', x)' при входе/выходе из системы. Теперь это не сработает. Что я могу применить в качестве альтернативы для аналогичного использования? cc @BasementKeyboardHero – Ernesto

ответ

6

Если вы посмотрите на app.js (то, что вы импортируете), это не ваш экземпляр приложения, она экспортирует подкласс из Ember.Application. Вот почему get и др. На нем отсутствуют.

var App = Ember.Application.extend({ <----- NOT create 
    modulePrefix: config.modulePrefix, 
    podModulePrefix: config.podModulePrefix, 
    Resolver: Resolver 
}); 

export default App; 

Чтобы получить фактический экземпляр приложения из вашего использования маршрута:

this.container.lookup('application:main') 
+0

В те месяцы, прошедшие с тех пор, как я спросил об этом, я все это понял, но спасибо за ответ всем остальным! – runspired

+0

yup. Ничто не ненавидит больше, чем скрытое разрешение в вопросе переполнения стека. – atomkirk