![]() |
Экземпляр какого класса придет в листенер
Когда подписываешься на событие, как узнать экземпляр какого класса придет в листенер?
Можно, наверно, написать в комментарии к метатегу Event. Какие еще есть варианты? UPDATED! Не читайте эту тему. Читайте сразу продолжение. http://www.flasher.ru/forum/showthread.php?t=210420 |
Если я правильно вас понял, то event.currentTarget даёт ответ на вопрос.
|
Странная задача, и скорее всего не правильная.
currentTarget - возвращает только тот объект на который вы подписались. target - работает и с детьми. Так вы получите ссылку на объект который сгенерировал событие, дальше чтобы узнать по ней класс, используйте getQualifiedClassName |
У меня другая задача.
Пример. Если собака проголодалась, она отправляет событие HungerEvent. Код AS3:
|
А сюда в этом случае не придет никакого HungerEvent. Сюда придет DogEvents (если конечно DogEvents - это событие). Если же нет, то архитектура не правильная.
И зачем заглядывать в код собаки, если уже есть подписка на DogEvents.HUNGER? Странная какая-то задача. Если нужно узнать на какие события можно вообще подписать собаку, то это делается указанием метатегов Event. В этом случае IDE покажет на какие события можно подписаться п.с. У каждого события есть свойство type. Вот его и можно посмотреть. Но, опять же, если все правильно сделано, и код события написан не або как |
А если такой пример.
Собака может родить либо щенка, либо котенка. При этом собака отправляет событие TransportEvent. Код AS3:
Вариант реализации #1 Код AS3:
Вариант реализации #2 Код AS3:
Какой из этих двух вариантов правильный и почему? P.S. Переменная cargo типа Object потому что я не хочу создавать кучу классов, которые будут отличаться от TransportEvent только типом переменной cargo. |
callme, caseyryan хотел сказать, что намного удобнее писать все данные в DogEvent и отправлять его. Отправлять другой ивент просто нелогично.
В смысле, что отправляйте тот ивент, на который подписываетесь, как в случае с любым нативным для платформы(MouseEvent.SOME_EVENT отправляет MouseEvent, KeyboardEvent.SOME_EVENT отправляет KeyboardEvent и т.д., а соответствующие пуш-событийные данные суются в KeyboardEvent.keyCode, MouseEvent.x/y) |
Было
Код AS3:
Код AS3:
|
Они должны быть как минимум логичны.
Ну как может быть DogEvent.CAT_BIRTH ? Собака рожает кота? Вам нужно избавиться от такой ненужной путаницы. Константы событий должны быть ясными и понятными, а названия событий соответствовать объектам, которые их отправляют. И станет намного проще. Если есть кот, то он должен порождать CatEvent. Но еще логичнее в данном случае привязать события вообще к самому действию. Например AnimalEvent.BIRTH, AnimalEvent.DEATH и т.д. А DogEvent и CatEvent использовать только для случаев. которые относятся конкретно к коту и собаке, и никак иначе. Например DogEvent.BARF или CatEvent.MEOW |
Продолжение темы тут
|
Скорее, DogEvent.WOOF в контексте MEOW. А то получается, что собачка блюёт, а котейка мяучит =)
|
dimarik, я и не заметил, что BARF вместо BARK написал :D
Четко подмечено)) |
| Часовой пояс GMT +4, время: 21:27. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.