|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
Экземпляр какого класса придет в листенер
Когда подписываешься на событие, как узнать экземпляр какого класса придет в листенер?
Можно, наверно, написать в комментарии к метатегу Event. Какие еще есть варианты? UPDATED! Не читайте эту тему. Читайте сразу продолжение. http://www.flasher.ru/forum/showthread.php?t=210420 Последний раз редактировалось callme; 11.03.2015 в 19:14. |
|
|||||
Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
|
Если я правильно вас понял, то event.currentTarget даёт ответ на вопрос.
__________________
Нормально делай — нормально будет! |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
Странная задача, и скорее всего не правильная.
currentTarget - возвращает только тот объект на который вы подписались. target - работает и с детьми. Так вы получите ссылку на объект который сгенерировал событие, дальше чтобы узнать по ней класс, используйте getQualifiedClassName |
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
У меня другая задача.
Пример. Если собака проголодалась, она отправляет событие HungerEvent. *как, не заглядывая в код собаки, узнать, что сюда придет экземпляр класса HungerEvent? |
|
|||||
А сюда в этом случае не придет никакого HungerEvent. Сюда придет DogEvents (если конечно DogEvents - это событие). Если же нет, то архитектура не правильная.
И зачем заглядывать в код собаки, если уже есть подписка на DogEvents.HUNGER? Странная какая-то задача. Если нужно узнать на какие события можно вообще подписать собаку, то это делается указанием метатегов Event. В этом случае IDE покажет на какие события можно подписаться п.с. У каждого события есть свойство type. Вот его и можно посмотреть. Но, опять же, если все правильно сделано, и код события написан не або как |
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
А если такой пример.
Собака может родить либо щенка, либо котенка. При этом собака отправляет событие TransportEvent. public function TransportEvent(cargo:Object, type:String, bubbles:Boolean=false, cancelable:Boolean=false) { super(type, bubbles, cancelable); _cargo = cargo; } Вариант реализации #1 var dog:Dog = new Dog(); dog.addEventListener(DogEvents.DOG_BIRTH, listener); function listener(event:TransportEvent) { } Вариант реализации #2 var dog:Dog = new Dog(); dog.addEventListener(TransportEvent.TRANSPORT, listener); function listener(event:TransportEvent) { if (event.cargo is Dog) ... } Какой из этих двух вариантов правильный и почему? P.S. Переменная cargo типа Object потому что я не хочу создавать кучу классов, которые будут отличаться от TransportEvent только типом переменной cargo. |
|
|||||
callme, caseyryan хотел сказать, что намного удобнее писать все данные в DogEvent и отправлять его. Отправлять другой ивент просто нелогично.
В смысле, что отправляйте тот ивент, на который подписываетесь, как в случае с любым нативным для платформы(MouseEvent.SOME_EVENT отправляет MouseEvent, KeyboardEvent.SOME_EVENT отправляет KeyboardEvent и т.д., а соответствующие пуш-событийные данные суются в KeyboardEvent.keyCode, MouseEvent.x/y)
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 11.03.2015 в 13:42. |
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
Было
package { public class DogEvent { static public const DOG_BIRTH:String = "dogBirth"; static public const CAT_BIRTH:String = "catBirth"; } } package { public class DogEvent extends TransportEvent { static public const DOG_BIRTH:String = "dogBirth"; static public const CAT_BIRTH:String = "catBirth"; public function DogEvent(cargo:Object, type:String, bubbles:Boolean=false, cancelable:Boolean=false) { super(cargo, type, bubbles, cancelable); } } } |
|
|||||
Они должны быть как минимум логичны.
Ну как может быть DogEvent.CAT_BIRTH ? Собака рожает кота? Вам нужно избавиться от такой ненужной путаницы. Константы событий должны быть ясными и понятными, а названия событий соответствовать объектам, которые их отправляют. И станет намного проще. Если есть кот, то он должен порождать CatEvent. Но еще логичнее в данном случае привязать события вообще к самому действию. Например AnimalEvent.BIRTH, AnimalEvent.DEATH и т.д. А DogEvent и CatEvent использовать только для случаев. которые относятся конкретно к коту и собаке, и никак иначе. Например DogEvent.BARF или CatEvent.MEOW |
Часовой пояс GMT +4, время: 16:06. |
|
« Предыдущая тема | Следующая тема » |
|
|