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;      
        }

flex AS3.0如何去掉Listener?

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 回答