2009-12-18 6 views
2

사용자가 키보드 이벤트를 수신하도록 등록 된 사용자 정의 TitleWindow 구성 요소가 있습니다 (esc가 창을 닫고 저장 등을 입력하도록 함). 그러나, 내 테스트에서 내 키보드 이벤트 처리기가 발생하지 않는 몇 가지 경우를 발견했습니다.Flex에서 포커스 및 이벤트 전파 디버그

왜 이런 일이 일어나고 있는지에 대한 가장 좋은 추측은 어딘가에 포커스를 도용하고 키보드 이벤트가 전파되는 것을 멈추는 어딘가의 자식 구성 요소가 있다는 것입니다. 불행히도, 내 에 많은 수의 구성 요소가 있기 때문에 초점을 누가 훔쳤는 지 알 수있는 좋은 방법이 없습니다.

내 질문에 다음은 Flex에서 포커스 문제와 이벤트 전파를 디버깅하기위한 유용한 팁/기술/도구입니까? 기본적으로, 나는 주어진 시간에 초점을두고 누가 언제 어떤 이벤트를 처리 하는지를 알려주는 무언가가 필요합니다 ... 가능합니까?

답변

1

Focus Manager을 사용하면 getFocus()를 호출 할 수 있으며 현재 포커스가있는 IFocusManagerComponent을 받게됩니다.

거기에서 flash.utils.getQualifiedClassName()을 사용하여 포커스를 도난당한 개체 유형을 결정하고 이에 따라 조치 할 수 있습니다.

주어진 시간에 이벤트를 처리하는 경우 e.target과 e.currentTarget을 비교하려고합니다.

+0

감사합니다, Tegeril, FocusManager를 사용하여 누가 포커스를 훔쳐서 키보드 이벤트를 소비했는지 발견 할 수있었습니다. 이벤트 핸들링을위한 솔루션에 대해 언급 할 것은 핸들러가 호출되지 않았기 때문에 e.target과 e.currentTarget을 중단하고 확인할 수있는 곳이 없었습니다. 이벤트를 전달하는 항목이나 이벤트를 처리하는 항목을 제어하지 않는 것은 매우 까다로운 상황입니다! – Dan

+0

아, 이벤트에 대한 좋은 지적. 나는 당신이 듣지 않는 물체에 불을 붙이면 비 버블 링 이벤트를 포착 할 수있는 방법을 생각할 수 없다. 아마도 누군가가 약간의 정보를 제공하고 우리 모두를 계몽 할 수있을 것이다. – Aaron

0

난 그냥 다음과 같은 기술이 초점 문제를 디버깅에 매우 도움이 될 수 있다는 것을 발견했습니다 : 텍스트 입력이 다른 구성 요소에서 포커스를 훔친 이유

private function handleTextInputFocus(event:FocusEvent):void { 
    try { 
    throw new Error('test'); 
    } catch (e:Error) { 
    trace(e.getStackTrace()); 
    } 
} 

스택은 설명 할 수있다.

관련 문제