今後の読者の喜びについての議論を要約します。
は、あなたが内部で接続されているどのようなイベントリスナーを確認する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。確かに削除されないリスナーが2つあります(MouseEvent.MOUSE_DOWNおよびTouchInteractionEvent.TOUCH_INTERACTION_START)。私は最初にアドビを追加するときにAdobeが(少なくとも)弱い参照を使用しなかったのだろうと思っています。とにかく、これらのリスナーをコンポーネント内から簡単に削除する方法はありますか?私は自分のコンポーネント内からTextBaseのリスナー機能にアクセスすることはできません。その機能を拡張し、独自のTextInputをオーバーライドするだけで、それらのリスナー機能にアクセスして削除することはできません。 – AlBirdie
'styleChanged()'メソッドを見てください。TextInputの 'interactMode'スタイルを' InteractionMode.MOUSE'に設定すると、リスナーが削除されるようです。 – RIAstar