removeEventListener для анон функции в AS3 - PullRequest
4 голосов
/ 05 января 2010

Мне нужно отключить действие onClick, пока анимация не остановится. Анимации могут быть запущены с помощью 4 разных кнопок - все они должны быть деактивированы.

Я использую слушателя для передачи параметров в функцию, которая будет запускать анимацию, поэтому я использую анонимную функцию в добавляющем слушателе:

up.addEventListener(MouseEvent.CLICK, 
    function(event:MouseEvent):void
    { 
        revealSpinner(event,51.42,1,spinner);
        event.currentTarget.removeEventListener(event.type, arguments.callee);
    },
    false, 0, true);

У меня также есть вызывающий удаленный слушатель, но на самом деле мне нужно удалить слушателя из трех других кнопок.

Я также попытался назвать анонимную функцию, но она не сработала:

up.addEventListener(MouseEvent.CLICK, 
    myFunc = function(event:MouseEvent):void
    { 
        revealSpinner(event,51.42,1,spinner);
    },
    false, 0, true);

// somewhere else in my app
up.removeEventListener(MouseEvent.CLICK, myFunc ); 

Edit: каждая из 4-х кнопок должна передавать разные параметры в методiqueSpinner () revealSpinner (событие, 51.42,1, кок); revealSpinner (событие, 51.42, -1, кок); revealSpinner (событие, 120,1, anotherMC); revealSpinner (событие, 120, -1, anotherMC);

Ответы [ 2 ]

1 голос
/ 10 января 2012

Можно использовать параметр event.currentTarget, как вы уже показали, но в функции обратного вызова. Просто используйте оператор switch для установки параметров в зависимости от того, как была вызвана функция:

function setupButtons()
{
    ...
    this.up.addEventListener(MouseEvent.CLICK, cbButtonClick, false, 0, true );
    this.down.addEventListener(MouseEvent.CLICK, cbButtonClick, false, 0, true );
}  

function cbButtonClick( event:MouseEvent ):void
{ 
    switch( event.currentTarget )
    {
        case this.up:
            revealSpinner(event,51.42,1,spinner);
            break;
        case this.down:
            revealSpinner(event,999999,1,spinner);
            break;
    }

    event.currentTarget.removeEventListener(event.type, cbButtonClick);
}
0 голосов
/ 31 июля 2011

Не используйте анонимные функции. Если вы определите обработчик для каждой кнопки, вы все равно сможете передать свои пользовательские параметры, но у вас будет правильно определенный слушатель, который можно удалить в любой момент:

up.addEventListener(MouseEvent.CLICK, upButtonHandler, false, 0, true);

function upButtonHandler(event:MouseEvent):void
{ 
    revealSpinner(event,51.42,1,spinner);
    up.removeEventListener(MouseEvent.CLICK, upButtonHandler);
}


down.addEventListener(MouseEvent.CLICK, downButtonHandler, false, 0, true);

function downButtonHandler(event:MouseEvent):void
{ 
    revealSpinner(event,999.999,999,spinner);
    down.removeEventListener(MouseEvent.CLICK, downButtonHandler);
}
...