2017-05-23 4 views
1

구성 요소가 있습니다. 실제로는 모달 대화 상자입니다. 해당 대화 상자를 완료하고 "확인"버튼을 누르면 해당 대화 상자를 연 투숙 페이지에서 머물고 싶습니다. 어려운 것은 아닙니다.구성 요소에서 새로 고침/새로 고침 경로

하지만 문제는 대화 상자가 데이터를 변경 (REST 호출을 통해 데이터를 가져 오는 중입니다)하므로 데이터 변경을 반영하기 위해 이미 경로를 새로 고침해야한다는 것입니다.

구성 요소에서 호출 했으므로 Route이 없으므로 route.refresh()을 호출 할 수 없습니다.

나는 라우터 가려고 :

this.set('router', Ember.getOwner(this).lookup('router:main'));

을 같은 페이지로 전환을했다 :

_this.get('router').transitionTo('my-route')

그러나 경로가 변경되지 않았기 때문에 (나는 단지 오픈 대화 상자), transitionTo가 실행되지 않습니다.

방아쇠를 강제로 실행할 수있는 방법이 있습니까 transitionTo 또는 내가있는 페이지를 새로 고치십니까?

감사합니다.

답변

2

, 가장 가까운 경로에서 또는 응용 프로그램 경로 파일에 refreshCurrentRoute 방법을 정의합니다.

actions:{ 
refreshCurrentRoute(){ 
    this.refresh(); 
} 
} 

귀하의 구성 요소에서 refreshCurrentRoute으로 전화해야합니다. ember-route-action-helper을 사용하거나 클로저 조치를 전달하십시오.

+0

감사합니다. @kumkanillam! – nullpointer

2

먼저 구성 요소에 routing service을 삽입하여 현재 경로 이름을 쉽게 얻을 수 있습니다.
그런 다음 현재 경로의 인스턴스를 취득하고 refresh 방법을 적용 할 수 있습니다이를 위해

// app/components/a-component.js 
 

 
import Component from "ember-component"; 
 
import service from "ember-service/inject"; 
 
import getOwner from "ember-owner/get"; 
 

 
export default Component.extend({ 
 
\t routing: service("-routing"), 
 
\t actions: { 
 
\t \t refresh() { 
 
\t \t \t const currentRouteName = this.get("routing.currentRouteName"); 
 
\t \t \t const currentRouteInstance = getOwner(this).lookup(`route:${currentRouteName}`); 
 
\t \t \t currentRouteInstance.refresh(); 
 
\t \t } 
 
\t } 
 
});

+0

'getOwner' 조회가'Route'가 아니라'Router'를 제공합니까? 'refresh' 메쏘드는'Router'가 아닌'Route'에 속합니다. – nullpointer

+0

라우터는'routing.router'를 통해 주어집니다. 룩업 모듈은 look-up 모듈 이름의'route :'접두사 때문에 라우트 인스턴스를 찾고있다. 'refresh' 메소드는 실제로'Route' 메소드입니다. 'currentRouteInstance.refresh();'는'Route' 인스턴스의 refresh 메소드를 적용하고 있습니다. 내 해결책은 @ kumkanillam의 것과 다르다. 그것은 당신이 어떤 행동을 버블 할 필요가 없다는 것이다. –

+0

'currentRouteInstance'는 정의되어 있지 않으며'refresh'를 호출 할 때 예외를 던집니다. 'currentRouteName'은 잘 계산되었습니다. – nullpointer

관련 문제