2017-01-16 5 views
0

this.send('makeItHappen')과 함께 작업을 보내고 컨트롤러 B에서 처리하려고하는 컨트롤러가 A입니다. 어떻게해야합니까?Ember에서 다른 컨트롤러의 컨트롤러에서 보낸 작업을 처리하는 방법은 무엇입니까?

JS : Uncaught Error: Nothing handled the action 'makeItHappen'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble.

, 누군가가 도움이 될 수 있습니다하십시오 : 컨트롤러 B에서

// controllers/documents/datasets/controller-A 
import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    actions: { 
    sendToDataCenter() { 
     this.send('makeItHappen'); // this throws an error 
    } 
    } 
}); 


// controllers/controller-B 
import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    actions: { 
    makeItHappen() { 
     console.log('It works!!'); 
    } 
    } 
}); 

, 그것은 오류가 발생합니다? 고맙습니다.

+0

컨트롤러 A와 컨트롤러 B 사이의 연결은 무엇입니까? 나는 그것이 각각 부모 자녀 경로인가? 연결이 없다면 컨트롤러를 삽입하고 함수를 호출 할 수 있습니다. direclty – kumkanillam

+0

감사합니다 @kumkanillam, 경로는 다음과 같습니다 : 'controllers/documents/datasets/controller-A' 및 'controllers/controller-B' – Shaoz

+0

아무 관계 A와 B 컨트롤러 사이에 부모 - 자식 관계가있을 때 부모 컨트롤러에 버블 링되고 계층 적으로 부모 응용 프로그램 라우트까지 버블 될 것입니다. 그래서 컨트롤러 -B의'makeItHappen' 함수를 주입하고 직접 호출 할 수 있습니다. 그 대답은 – kumkanillam

답변

2

일반적으로 각 경로에는 정의되지 않은 경우 하나의 기본 컨트롤러가 있습니다. 컨트롤러 -A에서이 코드 라인 this.send('makeItHappen');makeItHappen이 정의 된 경우 데이터 시트, 문서, 애플리케이션 컨트롤러 및 해당 라우트의 작업 해시에서 makeItHappen 메서드를 찾은 다음이 오류가 발생하지 않습니다.

현재 경로/컨트롤러 계층 구조에서 컨트롤러 -A와 컨트롤러 -B 간에는 상위 - 하위 관계가 없습니다. 그래서 컨트롤러 -B를 컨트롤러 -A 안에 넣고 makeItHappen을 직접 호출 할 수 있습니다.

// controllers/documents/datasets/controller-A 
import Ember from 'ember'; 

export default Ember.Controller.extend({ 
controllerB:Ember.inject.controller('controller-B');//this should be already instantiated ie,this corresponding route should be visited earlier otherwise you will get `unknown injection: controller:users' Error 
    actions: { 
    sendToDataCenter() { 
     this.get('controllerB').send('makeItHappen'); 
    } 
    } 
}); 
+0

고맙습니다. 하지만 컨트롤러 -A가 컨트롤러 -B에서 보내는 것을 사용하고 싶습니다. 컨트롤러 -A를 컨트롤러 -B에 주입하는 것과 같은 기술입니까? – Shaoz

+0

이러한 종류의 요구 사항은 홀수입니다. 함수 만 사용하려는 경우 util 파일로 작성하고 내보낼 수 있으며 필요한 곳에 포함 할 수 있습니다. – kumkanillam

+0

기본적으로 필자가 원하는 것은 select 드롭 다운의 onchange 이벤트에서 해당 값 (Controller-A)을 사용하여 액션을 보냅니다. 그런 다음 다른 컨트롤러 (Controller-B)에서 잡으십시오. 하지만 어떻게 할 수 있는지 모르겠습니다. – Shaoz