Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Перезапись addEventListener (http://www.flasher.ru/forum/showthread.php?t=210059)

Vlad84 21.01.2015 15:18

Перезапись addEventListener
 
Есть ли на as3 возможность как-то перезаписать уже существующий листенер?
Например, есть кнопка с одним экшеном:
Код AS3:

btn.addEventListener(MouseEvent.CLICK, btnAction);
function btnAction(e:MouseEvent) {
 
}

Я к той же кнопке хочу добавить новый хэндлер, но проблема в том, что листенеров у меня очень много будет для этой кнопки и действовать должен только один, который только что добавлен, а не все сразу.

illuzor 21.01.2015 15:59

У метода addEventListener есть параметр priority, который поможет в вашей ситуации. Выставляйте слушателям нужные приоритеты, а при срабатывании листенера с наивысшим приоритетом, отключайте распространение события через e.stopImmediatePropagation().

Или просто удаляйте все предыдущие слушатели.

Vlad84 21.01.2015 17:43

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

ObOs 21.01.2015 17:53

А вам принципиально надо несколько слушателей?
Почему бы не сделать все в одном слушателе:

Код AS3:

btn.addEventListener(MouseEvent.CLICK, buttonClickHandler);
private function buttonClickHandler(event:MouseEvent)
{
        if(variable)
        {
                dosomething_1();
        }else
        {
                dosomething_2();
        }
        //......
}


illuzor 21.01.2015 18:03

Цитата:

Сообщение от Vlad84 (Сообщение 1177846)
Придется держать переменную с приоритетом :(

И что? Если программиста пугает одна единственная переменная, это очень странно.

Vlad84 21.01.2015 18:45

Цитата:

Сообщение от illuzor (Сообщение 1177849)
И что? Если программиста пугает одна единственная переменная, это очень странно.

Не пугает, просто хотелось понять не будет ли она излишней.

olexandr 21.01.2015 19:58

можно еще отписываться от ненужного хендлера - тогда приоритеты не понадобятся )

gumback 22.01.2015 12:43

А у меня вообще сумасшедшая идея. Отнаследовать от кнопки новый класс CustomButton, переопределить dispatchEvent, где на пресс-событие диспатчить кастомный пользовательский ивент CustomEvent со свойством data, в котором передавать и какие-то данные, потом просто слушать это событие на кнопке, и в з зависимости event.data.someVariable через какой-нить оператор switch например вызывать уже разные ф-ции в основном коде... Хотя я только учусь, но вот такое вдруг пришло в голову.

olexandr 22.01.2015 13:00

почему сумасшедшая? вполне нормальная идея

illuzor 22.01.2015 14:16

gumback, думаю, это самый адекватный вариант из всех предложенных.


Часовой пояс GMT +4, время: 04:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.