|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2009
Сообщений: 64
|
Вызов removeEventListener в addEventListener
Подскажите, пожалуйста, должен ли верно работать следующий код:
roomPanel.addEventListener(MouseEvent.CLICK, function(e) { // тут некий код roomPanel.removeEventListener(MouseEvent.CLICK, function (e) {}); }); Добавлено через 6 минут Кстати, мой "некий код" вызывает другую функцию с передачей ей параметра (типа uint). Если создавать отдельную функцию (вместо function(e)), то как передать этой функции этот параметр? listener в addEventListener может содержать лишь имя функции, без параметров? |
|
|||||
LA_, говорилось уже миллион раз, даже отвечать не хочется... ну не используйте вы такой способ определения обработчиков, ну не правильно это...
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет... |
|
|||||
некий код нужно выносить в отдельную функцию, а removeEventListener нужно вызывать уже не из неё и с указанием
в твоем же варианте функции в addEventListener и в removeEventListener это два разных объекта, и отписаться так не получится передать дополнительный параметр нельзя, листенер ждет только один параметр типа Event, все что нужно надо передавать в нем тема эта тут уже до дыр обсуждена, посмотри по форуму |
|
|||||
1) этой функции уже передается параметр (Event), все что нужно должно быть 'на борту' этого параметра, см. класс Event и его наследников - у этих объектов и так довольно много полезных свойств, но ничто не мешает добавить новые, создав своего наследника Event и передавать его.., но это как бы самый общий случай
в случае с мышиными событиями часто достаточно просто знать какой объект явился источником события (см. Event#target, Event#currentTarget), нужный параметр тогда берем из свойств самого объекта или из Dictionary по ссылке на этот объект 2) можно |
|
|||||
Регистрация: Jun 2009
Сообщений: 64
|
silin, идея понятна. есть ли где-нить пример как это делается?
я делаю следующее: считываю данные с сервера (=узнаю значения 4-х переменных), отображаю панель, которая содержит четыре кнопки. при нажатии на кнопку 1 выполняется функция с полученным ранее значением переменной 1, при нажатии на кнопку 2 - переменной 2 и т.д. (пока переменных и кнопок - четыре, но в будущем может быть больше, потому нужен универсальный код). |
|
|||||
public class Main extends Sprite { private var _buttonsMap:Dictionary = new Dictionary(); public function Main():void { for (var i:int = 0; i < 4; i++) { var but:Sprite = new Sprite(); but.x = i * 50; but.graphics.beginFill(0); but.graphics.drawRect(0, 0, 30, 30); but.addEventListener(MouseEvent.CLICK, butClickHandler); _buttonsMap[but] = i;//какие-то данные addChild(but); } } private function butClickHandler(event:MouseEvent):void { var but:Sprite = event.target as Sprite; but.removeEventListener(MouseEvent.CLICK, butClickHandler); var id:int = _buttonsMap[but]; trace( "id : " + id );//эти же данные по клику } } |
|
|||||
2 LA: на сколько я знаю во флеше анонимные функции есть и работают хорошо. ниже пример. но я согласен, с людьми, что это зачастую плохая практика. хотя порой и удобная. лучше вместо анонимной функции передаать ссылку на некий метод
Последний раз редактировалось catyoshi; 04.08.2009 в 18:20. |
|
|||||
Регистрация: Jun 2009
Сообщений: 64
|
поменял
на
заработало как надо. спасибо! |
|
|||||
Регистрация: Jan 2010
Адрес: Кривой Рог
Сообщений: 117
|
возвращаясь к первому посту
а всё же интересно, а если дать функции имя roomPanel.addEventListener(MouseEvent.CLICK, function(e) someFunction { // тут некий код roomPanel.removeEventListener(MouseEvent.CLICK, someFunction); }); Добавлено через 9 минут таки работает(: на выходе: true false |
Часовой пояс GMT +4, время: 04:27. |
|
« Предыдущая тема | Следующая тема » |
Теги |
addeventlistener , removeEventListener |
Опции темы | |
Опции просмотра | |
|
|