0

ポップアップをトリガーした LinkBut​​ton のクリック イベントと競合するポップアップの FlexMouseEvent.MOUSE_DOWN_OUTSIDE イベントがあります。要するに、ラベルのクリック イベントで、ポップアップがクリックされるたびに、スイッチのようにポップアップを開閉したいのです。このポップアップを閉じるもう 1 つの方法は、FlexMouseEvent.MOUSE_DOWN_OUTSIDE によるものです。

特に、LinkBut​​ton をトリガーするポップアップで FlexMouseEvent.MOUSE_DOWN_OUTSIDE をクリックすると、2 つの競合が発生します。

私が考えているのは、イベントが LinkBut​​ton でクリックされた場合にイベントの伝播を停止することです/しかし、どうすればこれを行うことができますか? 基本的に、コールバック関数でどのイベントが実際にこれを起動したかを確認するにはどうすればよいですか (要素には複数のイベントリスナーがあるため、フェイルセーフではありません)。

かむためのコードを次に示します。

element.addEventListener(FlexMouseEvent.MOUSE_DOWN_OUTSIDE, callBackFunction, false, 0, true);  
element.addEventListener(AnotherEvent, callBackFunction, false, 0, true);
4

1 に答える 1

0

これは簡単です。各イベントには、イベントを発生させたオブジェクトであるcurrentTargetプロパティがあります。e.currentTargetを使用して、ユーザーがクリックしたオブジェクトを特定できます。

private function mouseDownOutside(e:FlexEvent = null):void{
    if ( e.currentTarget == obj ) {
         //do something
    }
}

もう少し一般的なものにする必要がある場合、またはオブジェクトが範囲外である場合は、単純な「is」チェックを実行することもできます。

if ( e.currentTarget is DataType ) {
    //do something
}

これは、ループ内に大量のオブジェクトを作成する場合にも役立ちます。ループを離れるとすぐにスコープから外れるため、後で実際に呼び出すことはできません。たとえば、50個のサムネイルを含むギャラリーを作成し、ユーザーがクリックしたサムネイルのフルスクリーンバージョンをロードするとします。インスタンス化ループでnameは、親指のプロパティをループ内の反復(通常はvar i)に設定し、それを使用(e.currentTarget as DisplayObject).nameしてより大きな画像に関連付けることができます。

于 2012-10-11T00:29:14.223 に答える