2014-02-28 3 views

답변

1

체크 아웃 the guide on redirection을 확인하십시오.

엠버는 이름의를 통해 당신이 경로로 전환 할 수 있거나 URL입니다 :

router.transitionTo('post', post) 
router.transitionTo('/posts/1') 

편집 :

내가 외부에서 라우터에 대한 참조를 얻을 수있는 좋은 방법의 확실하지 않다 매우 낙심 한 App이 아닌 Ember 응용 프로그램. 컨테이너 .lookup ('router : main'). Ember 앱 내에서 여전히이 UI 상호 작용을 처리 할 수 ​​있다면 ActionRoute에 액션 (액션 해시 내의 메소드)을 추가하는 것만 큼 간단합니다.

조작 window.location은 Ember 앱 외부에서 전환을 트리거하는 '가장 깨끗한'방법 일 것입니다.

+0

어떻게하면 라우터에 대한 참조를 얻을 수 있습니까? – user2765977

+0

Route 내부에서'this.transitionTo '를 시도하거나 컨트롤러 내부에서'this.transitionToRoute'를 시도하십시오 (일반적으로'actions' 해시의 어딘가에). – sheldonbaker

+0

실제로 어떤 인스턴트 메신저는 컨트롤러/경로 외부에서, 즉 일종의 외부 조건 또는 UI 상호 작용의 일부로이를 수행하는 방법입니다. – user2765977

2

나는 하이브리드 응용 프로그램을 가지고 있습니다. 여기에 legacy 코드와 Ember "app"를 실행합니다. 경계를 명확하게하기 위해 우리는 'LegacyBridge'라고 불리는 단순한 라이브러리를 만들었습니다. 내부 코드를 너무 많이 알지 않아도 Ember에 외부 코드 호출이 도움이됩니다. 외부 코드가 Ember App으로 할 수있는 것을 제한하는 좋은 방법이기도합니다. Ember App은 할 수있는 일이 많기 때문에 옵션을 제한하는 것이 좋습니다.

어쨌든, 여기에 당신이 할 수있는 작업은 다음과 같습니다

var transitionTo, getContainer; 

var getContainer = function() { 
    return App.__container__; 
}; 

var transitionTo = function(route) { 
    var router = Ordering.__container__.lookup('router:main'); 
    router.transitionTo(route); 
}; 

this.App.LegacyBridge = { 
    transitionTo: transitionTo 
}; 

을 그런 곳이 아닌 엠버 코드 :

App.LegacyBridge.transitionTo('posts/1'); 

이 확실히 해키입니다. 일반적으로 컨테이너에서 물건을 직접 조회하지는 않겠지 만 캡슐화가 잘되어 있기 때문에이 케이스는 내가 살 수있는 예외적 인 사례입니다.

URL을 변경하는 것보다 낫습니다. 라우터가 위치 전략을 기록에서 해시 또는 none으로 변경하거나, rootUrl이 변경되거나, 푸시 상태를 지원하지 않는 브라우저 (Ember가 해시로 대체 할 예정인 경우))

희망이 도움이됩니다.

관련 문제