2014-10-24 1 views
3

나는 전역 기반의 실시간 Ember 응용 프로그램을 ember-cli를 사용하는 es6 기반 응용 프로그램으로 변환하고 있습니다. 내 앱에서 나는 현재 경로를 꽤 자주 알아야한다. 전역 버전에서는이 작업을 수행하고있었습니다. 특정 이벤트가 발생했을 때 전환 할 경우 방법/결정할 때ember-cli App.get/App.set throw undefined

전역 패턴

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.getMyApp.set 모든 정의되지 않은을 것으로 밝혀졌습니다.

이 부분은 응용 프로그램 인스턴스가 더 이상 getter와 setter를 바인딩하지 않는다고 ember-cli의 버그라고 생각합니다. Part of Me는 애플리케이션 인스턴스에 물건을 저장하는 것은 좋지 않다는 것을 깨닫는다.

나는 각각 Ember.get(MyApp, ...)Ember.set(MyApp, ...)MyApp.getMyApp.set의 모든 인스턴스를 변환하여이 문제를 해결받을 수 있지만, 나는이가 어디 엠버 - CLI에 문제 또는 뭔가 다른 것으로 하나 보인다 내가 처음 여기 물어 줄 알았는데 내가 원하는 것을 얻는 더 좋은 방법. 당신이 (당신이 가져 오는 것) app.js 보면

+2

하기는 Ember.route.extend을 ({대신 CLI를 사용하는 경우 더 이상 myapp.stuff 내보낼 필요가 없습니다 // your code}) 대신 MyApp.set을 사용하십시오 this.set –

+0

가져올 필요가있는 것은 Ember,'ember 'from ember';'[ping me in the chat] (http : //chat.stackoverflow .com/rooms/63494/ember-js) 도움이 필요하면 –

+0

이 문제가 있습니다. ember-starter kit 앱을 ember-cli로 마이그레이션하고 있는데 다음과 같은 문제가 있습니다. App 객체의 속성에 현재 사용자에 대한 정보를 저장하는 데 사용되었습니다. 그래서 저는 앱 전체에서'App.get ('currentUser')'를 사용했고 로그인/로그 아웃시에는'app.set ('currentUser', x)'를 사용했습니다. 이제는 작동하지 않습니다. 비슷한 용도로 사용할 수있는 대안은 무엇입니까? cc @BasementKeyboardHero – Ernesto

답변

6

,이 응용 프로그램의 인스턴스가 아닌, 그것은 서브 클래스 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

예. 아무것도 스택 오버플로 질문에 숨겨진 해상도보다 더 싫어. – atomkirk