를 수신 할 수 초점 밖으로에 Event.CHANGE 이벤트를 전달합니다, 당신은이 작업을 수행 할 수 있습니다
systemManager.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, focusChangeHandler);
systemManager.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, focusChangeHandler);
그냥 구성 요소가 스테이지에서 제거되기 전에 이벤트 리스너를 정리하고 제거해야합니다 (동적으로 추가되었다고 가정). 그렇게하면 일련의 이벤트 리스너가 겹쳐지지 않게됩니다. , 다시
systemManager.addEventListener(MouseEvent.MOUSE_DOWN, system_mouseDownHandler);
private function system_mouseDownHandler(event:MouseEvent):void {
if(!event.target != this && !this.contains(event.target as DisplayObject)){
// Do Something Here
}
}
이 구성 요소가 추가되는 경우 반드시 정리 모든 이벤트 리스너합니다
또는, 당신은 단지 누군가가 특정 구성 요소의 외부 클릭 할 때마다 찾을하려는 경우, 당신은 이런 식으로 뭔가를 할 수/동적으로 제거되었습니다.
희망이 도움이됩니다.
편집 :
당신은 정리에 이벤트 리스너를 원하는이 같은 (제거 이벤트가 구성 요소에서 트리거 될 때 호출) 할 경우
<mx:Component remove="myRemoveHandler();" />
private function myRemoveHandler():void {
if(systemManager.hasEventListener(MouseEvent.MOUSE_DOWN) systemManager.removeEventListener(MouseEvent.MOUSE_DOWN, system_mouseDownHandler);
}
은 분명히 당신이 끝난 이벤트 리스너를 대체를 (초점 또는 마우스)를 사용하여
onfocusout 이벤트가있는 itemrenderer를 포함하는 목록의 init 함수에 추가했습니다. 지금 목록의 init 함수가 상태가 처음 방문되었을 때만 실행된다면 (나는 그것이 작동하는 방법이라고 생각한다.) 리스너를 쌓는 것에 대해 걱정할 필요가 있는가? – Damon
removeChild() 및 addChild()를 사용하는 경우에 대비하여 이벤트 리스너를 정리하는 방법을 보여주기 위해 내 대답을 업데이트했습니다. 녹색 확인을 클릭하여 허용 된 것으로 응답을 표시하십시오. – andrewpthorp
내가 무슨 뜻인지는 이벤트 리스너가 응용 프로그램 런타임 중에 한 번만 초기화되는 구성 요소에 있으므로 리스너가 두 번 이상 나타나서는 안됩니다. (bc. addChild/removeChild를 사용하고 있지 않습니다.) hasEventListener 명령이 표시됩니다. 매우 유용한, 감사합니다. – Damon