2014-05-14 2 views
6

한 View Controller에서 다른 ViewController에서 발생한 이벤트를 수신하는 방법을 파악하는 데 문제가 있습니다.보기 컨트롤러 간의 이벤트 수신

내 그리드 구성 요소는 리스너에게

selModel: { 
    listeners: { 
     selectionchange: 'onChemClick' 
    } 
}, 

를 정의하고 내의 ViewController (라고 chemslist는) 다른 이벤트를 발사 기능을 가지고

onChemClick: function(view, selected) { 
    console.log("before firing"); 
    this.fireEvent('canvasData', this, selected.length); 
    console.log("after firing"); 
    console.log(selected); 
} 

사실이 이벤트와 쇼 수신 다른 컨트롤러가 자료.

Ext.define('view.canvas.CanvasController', { 
extend: 'Ext.app.ViewController', 
alias: 'controller.canvas', 

listen: { 
    controller: { 
     chemslist: { 
      canvasData: 'onCanvasData' 
     } 
    } 
}, 

onCanvasData: function() { 
    console.log("At Fire"); 
} 

}); 

어떤 이유로 CanvasController가 이벤트를 수신 할 수없는 이유를 알 수 없습니다. 또한 Ticket 예제를 살펴보고 이벤트가 발생하는 방식과 다른 viewController가 이벤트를 수신하는 방식을 살펴 보았습니다.

또한 하나의 영역에서 그리드를 선택하면 다른 영역에서 많은 변화가 발생합니까? 모든 구성 요소가이를 수신 할 수 있도록 전역으로 실행해야하는 경우 가장 좋은 방법은 무엇입니까? 또는 내가 그것을 (ViewController 아닌) 주 컨트롤러에서 듣고 이벤트를 기반으로 구성 요소를 생성해야합니까?

감사합니다.

답변

3

워드 프로세서 말 :

선택기 컨트롤러의 ID 또는 컨트롤러에 '*'와일드 카드 중 하나입니다.

직감과는 반대로 우리가 듣고 싶은 컨트롤러에 id 나 itemId를 할당하지 않아도되지만 id는 컨트롤러 클래스 이름과 동일합니다.

나는 simple example 버튼을 만들었습니다. 2 개의 컨트롤러 C1은 버튼을 듣고 C2는 C1을 듣습니다.

Ext.define('Edsp.view.chemslist.ChemsListController', { 
extend: 'Ext.app.ViewController', 
alias: 'controller.chemslist', 
id: 'chemslist', 

리스닝의 ViewController는 다음과 같습니다 : 귀하의 예를 들어, 발사의 ViewController를

+1

ID를 설정하고 와일드 카드를 사용해 보았습니다. 둘 다 일하지 않습니다. 나는 정말로 분명한 것을 놓치고 있는지, 아니면 뭔가 잘못되어 있는지 모른다. – Jayaram

+0

나는 약간 연구를하고 응답을 새롭게했다. 확인 해봐. – Saki

+3

두 예제가 모두 컨트롤러 인 경우 예제가 작동합니다. ViewController는 무엇입니까? – Jayaram

3

이벤트 처리는 ViewControllers 사이에 노력하고 있습니다,하지만 당신은 (사키가 언급 한 바와 같이) 청취 설정에서 컨트롤러의 ID를 제공해야 :

Ext.define('Edsp.view.canvas.CanvasController', { 
extend: 'Ext.app.ViewController', 
alias: 'controller.canvas', 

listen: { 
    controller: { 
     '#chemslist': { 
      canvasData: 'onCanvasData' 
     } 
    } 
}, 
1

작은 보정, ID는, 해시를 필요로하지 않습니다 그것은 작동하지 않습니다 사실이어야한다 :

listen: { 
controller: { 
    'chemslist': { 
     canvasData: 'onCanvasData' 
    } 
} 
+0

이것은 올바른 방법이며, extjs 5.x에서 별칭을 사용할 때 해시가 없습니다. – Tom