Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Чудеса асинхронного исполнения. (http://www.flasher.ru/forum/showthread.php?t=173074)

fish_r 23.12.2011 00:11

Чудеса асинхронного исполнения.
 
Кратко опишу последовательность событий:

1. Вьюер инициализирует контролл, сохраняет на него ссылку.
2. Контролл инициализирует модель, отдает ссылку на модель во
вьюер.
3. Вьюер принимает ссылку вешает слушателя на событие готовности
данных в модели.
4. Конролл инициализирует датапровайдер отвечающий за доставку
данных.
5. Контролл сообщает модели данные извлеченные датапровайдером
из sharedobject.
6. Модель извлекает данные из полученного ByteArray и, по сути,
инициализирует объект VO.
7. Модель поручает статику подготовить два вида данных
(распарсить строку, а также подготовить html-строку для
текст.поля).
8. Модель диспатчит готовность данных для вьюера.
9. Вьюер готовит на основе полученных данных шесть, относительно
непростых виз.объектов, при инициализации последних, в них,
уже, готовятся другие виз.объекты, что требует некоторых доп.
вычислений.
10. Вьюер пытается сообщить контроллу ссылку на себя... не совсем так,
Вьюер обращается к контроллу для инициализации прослушивания его эл-тов.

В результате последнего возникает ошибка: Контролл равен null (!!!)



Как может быть такое?

PainKiller 23.12.2011 00:18

Как то слишком абстрактно без кода... Но так сходу вопросы возникают - Может где то в процессе контролл обнуляется? И что в дебаггере пошагово по контроллу видно, именно в момент возникновения ошибки?

fish_r 23.12.2011 00:30

Это было бы очень простым ответом )

Нет, проблема решается следующим образом: после шага №2 контролл устанавливает слушатель на вхождение в следующий кадр. И тогда всё нормально исполняется.
Да и трейсы показывают последовательное исполнение, не параллельное.

Значит, контролл нигде не обнуляется. В чем же может быть дело?

ЗЫ. Код и трейсы могу привести, просто его много получается, на словах проще. Если никто сходу не сможет ответить приведу и код.

ShockWave512 23.12.2011 02:53

ccылку на контрол во вьювере сделать сеттером и последить кто его менят в нул

Zebestov 23.12.2011 03:26

Цитата:

Сообщение от fish_r (Сообщение 1053183)
1. Вьюер инициализирует контролл, сохраняет на него ссылку.

Опа! Почему входной точкой является view, а не controller?

Aquahawk 23.12.2011 03:29

Цитата:

Да и трейсы показывают последовательное исполнение, не параллельное.
Во флеше нет параллельного исполнения. Когда вы диспатчите событие, прямо в этот момент и отработают все слушатели, как будто их прямо тут и вызвали. Думаю косяк у вас в этом.

fish_r 23.12.2011 03:30

ссылка на контролл есть только у одного класса - у гл.класса приложения, да и тому она нафиг не нужна - почикал (код не рефакторенный) , однако это ничего не изменило, трейсы показывают последовательное исполнение:

Код:

1324592402281. DragTheWord, init,  :
1324592402296. DTW_model, loadDataCompleteHandler,  :
1324592402312. DragTheWord, addStartDataHandler,  :
1324592402328. DragTheWord, init,  :
1324592402328. DragTheWord, init,  :

Здесь числовое значение - хронометраж, строки указывают на метод в котором расположен данный трейс,
в частности строка "DragTheWord, init," указывает на метод init() класса DragTheWord().
Видно, что первая и последние две строки относятся к одному и тому же методу, первая - до инициализации контролла, последние здесь же , в этом же методе, но уже после инициализации.

Строка инициализации выглядит так:

Код AS3:

  new DTW_controll( this );

Как видно она ничего не возвращает и вернуть ничего не может, и программе незачем ждать результатов вызова, но тем не менее дальнейшее исполнение происходит только после инициализации прочих объектов...

Добавлено через 2 минуты
Цитата:

Сообщение от Zebestov (Сообщение 1053198)
Опа! Почему входной точкой является view, а не controller?

Потому, что у меня контролл - тупой кусок кабеля, правда почти, он все же готовит информацию для переваривания моделью. Значит тупой кусок кабеля с контроллером )

Zebestov 23.12.2011 03:38

Цитата:

Сообщение от fish_r (Сообщение 1053200)
Потому, что у меня контролл - тупой кусок кабеля, правда почти, он все же готовит информацию для переваривания моделью. Значит тупой кусок кабеля с контроллером )

Я было подумал, что речь об MVC.

Aquahawk 23.12.2011 03:40

собирите минимальный приме, прям интересно посмотрить

fish_r 23.12.2011 03:43

Да, речь про MVC и есть. Только так как я его понимаю. Главный класс - по сути просто фасад. Однако из за специфики флеша, он и вьюер. Оправдаться могу только тем, что они ничего и не делает, кроме старта приложения и создания подвьюх на старте.


Часовой пояс GMT +4, время: 08:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.