|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jan 2016
Сообщений: 2
|
Тайминг/последовательность выполнения и dispatchEvent
Здравия!
Проблема вот в чём - конструктор "LableField()" заканчивает своё выполнение быстрее нежели добавляется слушатель "lableField.addEventListener(LableField.graphDataLoaded, lableFieldLoaded)" на окончание конструктора, в связи с чем "dispatchEvent(new Event(LableField.graphDataLoaded))" срабатывает слишком рано и на этом всё заканчивается, то есть функция "lableFieldLoaded(e: Event)" никогда не сработает. Я что-то упускаю из виду, но что? Прошу подсказать, если не ответ, то хотя бы путь где поискать, а пока штудирую справочники :( package { import flash.display.Sprite; import tp.*; import flash.events.Event; public class TestProj extends Sprite { private var graphConteiner: Sprite; public function TestProj() { trace ("TestProj Создание основного контейнера отображения"); graphConteiner = new Sprite(); trace ("TestProj Запуск конструктора LableField()"); var lableField = new LableField(); trace ("TestProj Добавление слушателя addEventListener(LableField.graphDataLoaded, lableFieldLoaded)"); lableField.addEventListener(LableField.graphDataLoaded, lableFieldLoaded); function lableFieldLoaded(e: Event): void { trace("TestProj Присвоение переменной данных из LableField"); var lableContData = lableField.getContainerLableField(); trace("TestProj Добавление в контейнер непосредственного отображения"); if (graphConteiner.contains(lableContData)==false) graphConteiner.addChild(lableContData); trace("TestProj Добавление на экран основного контейнера отображения"); addChild(graphConteiner); } } } } package tp { import flash.events.EventDispatcher; import flash.events.Event; import flash.display.Sprite; import flash.text.TextField; public class LableField extends EventDispatcher { public static const graphDataLoaded: String = "graphDataLoaded"; private var labContainer: Sprite; //контейнер для хранения лэйблов public function LableField() { labContainer = new Sprite(); var Lable001: TextField = new TextField(); Lable001.x = 10; Lable001.y = 10; Lable001.text = "Если это видно на экране, значит всё работает как надо."; trace ("LableField Добавление данных в группу labContainer"); labContainer.addChild(Lable001); trace ("LableField Запуск dispatchEvent(new Event(LableField.graphDataLoaded))"); dispatchEvent(new Event(LableField.graphDataLoaded)); } public function getContainerLableField() { return (labContainer); } } } |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну, Вы подписываетесь на событие после того, как оно отправлено. А вопрос-то в чем?
Нет никакого вообще смысла отправлять какие-то события из конструктора. Потому что пока работает конструктор, нет его результата — объекта, с которым может что-то случиться) Некому посылать событие и нельзя подписаться на событие от объекта, которого еще нет. Это абракадабра. У меня вот есть вопрос — Вам зачем тут событие вообще, о чем оно? Код итак исполняется синхронно, и само собой, что на строку, следующую после new ..() вы перейдете только после того, как конструктор полностью отработает. То есть можете смело считать, что свое "событие" вы уже получили.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Jan 2016
Сообщений: 2
|
Да, Вы правы. Странная у меня получилась логика. В данном примере EventDispatcher вообще не нужен. Я как-то совсем упустил что пока new ... () не закончит своё действие, выполнение дальше не пойдёт. Значит проблема у меня в чём-то другом.
Спасибо за ответ. Тут всё, пошёл искать проблемы в других местах. |
Часовой пояс GMT +4, время: 14:16. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|