EventListeners во вложенных функциях - PullRequest
0 голосов
/ 12 марта 2012

У меня есть несколько слушателей MouseEvent вне функции, которая содержит вложенные функции, которым нужно использовать функции, прикрепленные к слушателям.

button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); 

function navigation (): void {

    if statements;

    function buttonOver(event:MouseEvent):void {
        movieclip.play();
    }
}

Я получаю сообщение об ошибке «1120: доступ к неопределенному свойству buttonOver». Я знаю, что это потому, что EventListener находится за пределами функции «навигация», но мне нужно, чтобы к нему позже обратились другие функции. Я все об этом говорю?

Ответы [ 5 ]

1 голос
/ 12 марта 2012

Забудьте о вложенных и анонимных функциях. А также забудьте о написании кода во фрейме. Вы можете делать все, что хотите, не используя их.

1 голос
/ 12 марта 2012

Это не сработает. Я не думаю, что вы должны вкладывать функции. Почему бы вам не использовать класс, к которому у вас есть доступ из других классов / экземпляров?

Rob

0 голосов
/ 13 марта 2012

Как уже упоминалось в других ответах, ваша вложенная функция ограничена областью действия функции, в которой она определена. Ваша попытка получить доступ к ней вне этой функции приведет к ошибке.Соответствующие документы Adobe приведены ниже:

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f54.html

Переместите вложенную функцию за пределы функции, в которую она вложена, или измените слушателя на вызов navigation и попросите navigation вызвать buttonOver

0 голосов
/ 13 марта 2012

Я не уверен, но, возможно, вы хотите добавить, а затем удалить прослушиватель событий в соответствии с каким-либо условием?

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

function navigation (): void {
    if (somethingTrue){
        button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); 
    else if(somethingElseTrue){
        button1.removeEventListener(MouseEvent.ROLL_OVER, buttonOver);
    }  
}

function buttonOver(event:MouseEvent):void {
    movieclip.play();
}
0 голосов
/ 12 марта 2012

Я не уверен, зачем вам сначала нужна вложенная функция. Все будет намного проще без вложенности.

button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); 

function navigation (): void {

    if statements;
}
function buttonOver(event:MouseEvent):void {
    movieclip.play();
}
...