0

リスナーを削除したいのですが、削除できません。次のメソッドを使用します: board.removeEventListener(MouseEvent.MOUSE_MOVE, mouseDrag);

var board:UIComponent=new UIComponent();
board.addEventListener(MouseEvent.MOUSE_MOVE, function(event:MouseEvent):void
            {
                mouseDrag(event,board);             
            });

private function mouseDrag(event:MouseEvent,board:UIComponent):void
        {
            var x:Number=rectX + (event.stageX - mouseX);
            var y:Number=rectY + (event.stageY - mouseY);               board.x=x;
            board.y=y;      
        }

フレックスAS3.0はリスナーをどのように削除しますか?

4

1 に答える 1

3

最初にアタッチしたものと同じ機能を削除しているわけではありません。実行する匿名関数を添付し、それ自体mouseDragを削除しようとしています。mouseDrag

あなたの状況にはいくつかの解決策があります。

1. 匿名関数を捨てて、event.currentTarget を使用する

board.addEventListener(MouseEvent.MOUSE_MOVE, mouseDrag);
private function mouseDrag(event:MouseEvent):void {
    var board:UIComponent = event.currentTarget as UIComponent;
    board.removeEventListener(MouseEvent.MOUSE_MOVE, mouseDrag);
    ...
}

2.無名関数を変数に入れて参照できるようにする

var anonymousFunction:Function = function(event:MouseEvent):void {
    mouseDrag(event,board);             
};
board.addEventListener(MouseEvent.MOUSE_MOVE, anonymousFunction);

その参照にまだアクセスできる場合は、リスナーを正しく削除できるようになりました。

board.removeEventListener(MouseEvent.MOUSE_MOVE, anonymousFunction);
于 2013-02-05T09:33:24.913 に答える