0

나는 이벤트를 듣고 싶은 플렉스 컴포넌트에 코드를 가지고있다. 이벤트의 소스는 다른 클래스 등에서 실행중인 다른 클래스에 의해 실행되는 커스텀 클래스이다. 나는 이벤트 한 이벤트는 얼마나 멀리 갈 수 있으며 어떻게들을 수 있습니까?

private function finishEvent():void { 
     var evt:EventDispatcher = new EventDispatcher; 
     var finished:Event = new Event("finishedInterpret"); 
     evt.dispatchEvent(finished); 
    } 

다음 난 그냥 이런 식으로 내 구성 요소를 잡을 수 ... 전체 응용 프로그램을 통해 전달할 것, 그래서 내가 이렇게 같은 클래스의 사용자 정의 이벤트를 파견하면 나는 기대했다 :

public function interpret(data:Array):void { 
    addEventListener("finishedInterpret", applyInferences); 
    db.executeBatch(); 
} 

이벤트는 executeBatch가 끝나고 finishEvent가 호출 될 때 기본적으로 시작됩니다. 그러나 저는 l입니다. istener는 아무것도 얻지 않고있다. db.addEventListener로 설정하려고 시도했지만 효과가있었습니다.

답변

1

이벤트가 발생하게되는 방식은 객체가 이벤트를 전달하고 해당 이벤트의 소비자가 해당 객체의 이벤트 을 수신하는 것입니다. 전역 이벤트 디스패처 (일반적이지 않음)가없는 한 응용 프로그램 차원의 이벤트 발송은 없습니다.

이 방법이 가장 좋은 패턴입니다. 하위 구성 요소가 이벤트를 전달하고 해당 하위 소유자가 이벤트를 수신 대기합니다. 예를 들어 :

child.addEventListener("finishedInterpret", applyInferences); 

은 그대로, 코드 자체
에서 이벤트 에 대해 듣고있다.

+0

아. 불행히도 내가 사용하고있는 클래스의 구성 요소가 완료되면 클래스 호출의 여러 레벨에 꽤 묻혀 있습니다. 그래서 기본적으로 각 레벨의 이벤트를 전달해야합니다. hrmph는 해당 코드를 크게 수정해야합니다. – Damon

+0

이벤트 버블 링을 사용할 수 있습니다. 그러면 이벤트가 여러 레이어를 통해 표시 트리의 첫 번째 수신 조상에 전파됩니다. – Jacob

+0

아 .. 나는 기본적으로 활성화되어 있다고 생각했습니다. 거품을 true로 설정하려고하면 읽기 전용 속성이됩니다. – Damon

관련 문제