Ожидаемый/псевдо-пример:
stage.addEventListener(MouseEvent.CLICK, onClick.someWayToPassParameters(true, 123, 4.56, "string"));
function onClick(e:MouseEvent):void {
trace("Received " + someWayToRetrieveParameters().b/i/n/s + ".");
}
На протяжении многих лет (3 ~ 4), на каждом сайте, форуме, блоге, где бы я ни искал, люди говорят мне, что нет простого способа сделать это. Они обычно предлагают:
-
Добавьте слушателя в динамический объект, где вы можете установить значение для дополнительного свойства и ссылаться на него (e.target.property/e.currentTarget.property) в функции.
Не все классы являются динамическими. Например, это не будет работать на Sprite.
-
Расширить класс объекта с помощью специального класса для добавления свойства или просто сделать его динамическим.
Каждый раз вам нужно будет создать новый класс.
-
Использовать анонимную функцию как обработчик событий.
Нет ссылки (и это уродливо). Чтобы удалить слушателя на свободные ресурсы, вы вынуждены делать это внутри самой функции с аргументами .callee.
-
Вызовите другую функцию, используя этот параметр, внутри обработчика событий.
А где в вызове обработчика события идет параметр?
-
Храните обработчик событий в той же области, что и параметр.
Нарушение общего смыслового беспорядка.
-
Инкапсулируйте как определение обработчика события, так и вызов addEventListener в функцию, получающую цель и параметры.
Он может смешивать области, но он близок. Однако вы должны быть осторожны.
... Среди многих других предлагаемых обходных решений.
Все, что я хочу, это просто передать аргумент обработчику событий, чтобы я мог использовать его внутри своей функции, как и любая нормальная функция!
Я прошу слишком много?