|
|
|||||
Чудеса асинхронного исполнения.
Кратко опишу последовательность событий:
1. Вьюер инициализирует контролл, сохраняет на него ссылку. 2. Контролл инициализирует модель, отдает ссылку на модель во вьюер. 3. Вьюер принимает ссылку вешает слушателя на событие готовности данных в модели. 4. Конролл инициализирует датапровайдер отвечающий за доставку данных. 5. Контролл сообщает модели данные извлеченные датапровайдером из sharedobject. 6. Модель извлекает данные из полученного ByteArray и, по сути, инициализирует объект VO. 7. Модель поручает статику подготовить два вида данных (распарсить строку, а также подготовить html-строку для текст.поля). 8. Модель диспатчит готовность данных для вьюера. 9. Вьюер готовит на основе полученных данных шесть, относительно непростых виз.объектов, при инициализации последних, в них, уже, готовятся другие виз.объекты, что требует некоторых доп. вычислений. 10. Вьюер обращается к контроллу для инициализации прослушивания его эл-тов. В результате последнего возникает ошибка: Контролл равен null (!!!) Как может быть такое? Последний раз редактировалось fish_r; 23.12.2011 в 01:51. |
|
|||||
Это было бы очень простым ответом )
Нет, проблема решается следующим образом: после шага №2 контролл устанавливает слушатель на вхождение в следующий кадр. И тогда всё нормально исполняется. Да и трейсы показывают последовательное исполнение, не параллельное. Значит, контролл нигде не обнуляется. В чем же может быть дело? ЗЫ. Код и трейсы могу привести, просто его много получается, на словах проще. Если никто сходу не сможет ответить приведу и код. |
|
|||||
ccылку на контрол во вьювере сделать сеттером и последить кто его менят в нул
|
|
|||||
Lorem ipsum
|
Опа! Почему входной точкой является view, а не controller?
__________________
Поймай яблоко 2! |
|
|||||
Цитата:
__________________
:) |
|
|||||
ссылка на контролл есть только у одного класса - у гл.класса приложения, да и тому она нафиг не нужна - почикал (код не рефакторенный) , однако это ничего не изменило, трейсы показывают последовательное исполнение:
1324592402281. DragTheWord, init, : 1324592402296. DTW_model, loadDataCompleteHandler, : 1324592402312. DragTheWord, addStartDataHandler, : 1324592402328. DragTheWord, init, : 1324592402328. DragTheWord, init, : в частности строка "DragTheWord, init," указывает на метод init() класса DragTheWord(). Видно, что первая и последние две строки относятся к одному и тому же методу, первая - до инициализации контролла, последние здесь же , в этом же методе, но уже после инициализации. Строка инициализации выглядит так: Как видно она ничего не возвращает и вернуть ничего не может, и программе незачем ждать результатов вызова, но тем не менее дальнейшее исполнение происходит только после инициализации прочих объектов... Добавлено через 2 минуты Потому, что у меня контролл - тупой кусок кабеля, правда почти, он все же готовит информацию для переваривания моделью. Значит тупой кусок кабеля с контроллером ) |
|
|||||
Lorem ipsum
|
Я было подумал, что речь об MVC.
__________________
Поймай яблоко 2! |
|
|||||
Да, речь про MVC и есть. Только так как я его понимаю. Главный класс - по сути просто фасад. Однако из за специфики флеша, он и вьюер. Оправдаться могу только тем, что они ничего и не делает, кроме старта приложения и создания подвьюх на старте.
|
Часовой пояс GMT +4, время: 00:54. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|