나는 미래의 독자들의 기쁨에 대한 토론을 요약 할 것이다.
당신은 내부적으로 연결되어 어떤 이벤트 청취자 볼 수 SkinnableTextBase의 코드를 살펴 가질 수 있었다 범인
를 찾을 수 있습니다. 이제 알 수 있듯이 hasEventListener()을 사용하여 제거되지 않은 항목을 테스트 할 수 있습니다.
- 의 MouseEvent.MOUSE_DOWN
- TouchInteractionEvent.TOUCH_INTERACTION_START
을
는 보라 (바람직의 TextInput 서브 클래스없이) 그들에게 제거 :이 기술을 사용하여 우리는 이러한 청취자가 여전히 남아있는 것을 발견했다 이러한 리스너가 등록 된 SkinnableTextBase 코드에서
override public function styleChanged(styleProp:String):void
{
super.styleChanged(styleProp);
if (!styleProp ||
styleProp == "styleName" || styleProp == "interactionMode")
{
if (getStyle("interactionMode") == InteractionMode.TOUCH && !touchHandlersAdded)
{
addEventListener(MouseEvent.MOUSE_DOWN, touchMouseDownHandler);
addEventListener(TouchInteractionEvent.TOUCH_INTERACTION_START,
touchInteractionStartHandler);
touchHandlersAdded = true;
}
else if (getStyle("interactionMode") == InteractionMode.MOUSE && touchHandlersAdded)
{
removeEventListener(MouseEvent.MOUSE_DOWN, touchMouseDownHandler);
removeEventListener(TouchInteractionEvent.TOUCH_INTERACTION_START,
touchInteractionStartHandler);
touchHandlersAdded = false;
}
}
}
즉, TextInput의 스타일을 InteractionMode.MOUSE
으로 설정하면 리스너가 제거되어야합니다.
참고 : JIRA bug base를 살펴보고 아무도이 이미있는 경우 버그를 제기 할 수 있습니다. 비록 Flex가 Apache로 옮겨 가고 있기 때문에 JIRA가 여전히 유지되고 있는지 확실하지 않습니다.
'hasEventListener()'메서드를 사용하여 어떤 리스너가 제거되지 않았는지 확인할 수 있습니다. SkinnableTextBase의 소스 코드를보고 내부적으로 추가 된 수신기를 확인하십시오. – RIAstar
정말 고마워요 RIAstar. 실제로 제거되지 않은 리스너가 두 개 있습니다 (MouseEvent.MOUSE_DOWN 및 TouchInteractionEvent.TOUCH_INTERACTION_START). 나는 어도비가 왜 처음에 그들을 추가 할 때 약한 참조를 사용하지 않았는지 궁금해. 어쨌든, 내 구성 요소 내에서 해당 수신기를 제거하는 빠른 방법이 있습니까? 내 구성 요소 내에서 TextBase의 청취자 기능에 액세스 할 수 없으며이를 확장하고 내 TextInput을 작성하여 무시한 다음 해당 청취자 기능에 액세스하여 제거 할 수 있기를 바랍니다. – AlBirdie
'styleChanged()'메소드를 보자. TextInput의'interactionMode' 스타일을'InteractionMode.MOUSE'로 설정하면 리스너가 제거되는 것처럼 보일 것이다. – RIAstar