![]() |
|
|
|||||
Цитата:
Цитата:
писать А еще лучше перенаправлять Значит оставлю override, раз это лучше. Буду знать. Снкс!
__________________
кто не отвечает, того garbage collector забирает Последний раз редактировалось djken; 15.05.2018 в 18:42. |
|
|||||
Цитата:
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
caseyryan, огромнейшее спасибо за помощь!
__________________
кто не отвечает, того garbage collector забирает |
|
|||||
Наконец-то сел почитать, чтобы разобраться с Событиями досканально - многое прояснил для себя.
Но есть момент, в котором не знаю как правильно поступить: как раз столкнулся на моем примере, когда по совету от caseyryan стал не создавать свое новое событие, а передиспатчивать существующее - dispatchEvent(e). Мне нужно ловить событие клика по спрайту _box, который внутри класса ImageBox. public class ImageBox extends Sprite { private var _box:Sprite; // в этом спрайте рисуется бэкграунд и грузится картинка private var _cb:CheckBox; // чекбокс public function ImageBox() { _box = new Sprite(); _box.addEventListener(MouseEvent.CLICK, onClickHandler); addChild(_box); _cb = new CheckBox(); addChild(_cb); } private function onClickHandler(e:MouseEvent):void { dispatchEvent(e); } } _imageBox = new ImageBox(); _imageBox.addEventListener(MouseEvent.CLICK, onClick); addChild(_imageBox); private function onClick(e:MouseEvent):void { trace(e.target); // выводит [object ImageBox] и [object Sprite] } Как я понимаю: ImageBox имеет событие click, унаследовав от Sprite. И _box тоже. Подписавшись на событие click у _imageBox - из-за цепочки событий в иерархии отображаемых объектов на фазе захвата происходит диспатч сначала у предка [object ImageBox], а потом и у получателя [object Sprite]. Верно ли понимаю? Вопрос: мне не нужно чтобы onClick срабатывал дважды, т.к. в нем будут производиться какие-либо действия дважды.. Вижу два выхода: 1) в обработчике проверять от кого пришло событие и только после этого выполнять дальнейшие действия. 2) либо все таки в onClickHandler диспатчить свое событие. Подскажите пожалуйста.
__________________
кто не отвечает, того garbage collector забирает |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
dispatchEvent диспатчит клон события,поэтому перед посылкой оригинальное событие надо остановить через stopImmediatePropogation.
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
От задачи же зависит..
Если вам надо событие клика по КАРТИНКЕ, но к самой картинке доступа нет и добавить ей слушатель нельзя, то придется диспатчить от имени контейнера и тогда да, лучше использовать кастомное событие. То есть обычный Event, но со "своим" строковым типом, который можно объявить константой в классе ImageBox, пусть будет ImageBox.CLICK_IMAGE. public class ImageBox extends Sprite { static public const CLICK_IMAGE:String = "clickImage"; private var _box:Sprite; // в этом спрайте рисуется бэкграунд и грузится картинка private var _cb:CheckBox; // чекбокс public function ImageBox() { _box = new Sprite(); _box.addEventListener(MouseEvent.CLICK, onClickHandler); addChild(_box); } private function onClickHandler(e:MouseEvent):void { dispatchEvent(new Event(CLICK_IMAGE)); } }
__________________
Reality.getBounds(this); |
|
|||||
Цитата:
вернее через акцессор или все таки диспатчить свое событие clickImage? undefined, попробовал stopImmediatePropogation, работает. Но не совсем понимаю, что значит dispatchEvent диспатчит клон? В справке Adobe ничего не нашел про stopImmediatePropogation. Упоминается вскользь... Цитата:
__________________
кто не отвечает, того garbage collector забирает Последний раз редактировалось djken; 24.05.2018 в 18:57. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
Рассылается не само событие e,а то,что вернет e.clone()(клон события).А само событие e продолжит свое путешествие по дисплейлисту,поэтому у тебя лисенер и срабатывал 2 раза т.к. ловил оригинальный ивент и клон. |
|
|||||
undefined, теперь понял! Огромное спасибо за разъяснение!
__________________
кто не отвечает, того garbage collector забирает |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Цитата:
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:23. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|