Инициализация модели представления Flex Cairngorm 3 - PullRequest
1 голос
/ 13 июля 2011

хорошо, у меня есть окно TitleWindow, которое я открываю ... и у меня есть 6 определенных состояний. Я использую шаблон модели Presentation для всех своих представлений. Я обнаружил неприятный нюанс. Когда я указываю моему окну перейти в состояние XXX, элементы управления должны инициализироваться, так как состояния в flex используют ленивую загрузку. так что ... мой PM-код, который говорит, что myTextArea.text взрывается и говорит "не может получить доступ ...", поэтому в качестве обходного пути я сделал несколько событий creationComplete на своих элементах управления, чтобы зарегистрировать элемент управления в PM. Поэтому, когда состояние изменяется, текстовая область, наконец, инициализируется и при созданииComplete вызывает PM.registerTextArea (), который устанавливает ссылку на него. затем в этой функции я запускаю свой код ... myTextArea.text .. и т. д.

Это похоже на такой уродливый хак, что я его ненавижу. Есть ли способ подождать, пока все состояние не будет создано, а затем вызвать код на ПМ? Я пытался войти в штат ... но это событие, кажется, срабатывает до того, как контроль государства будет готов.

Я пытался добавить комментарий, но я думаю, что редактирование - единственный способ, которым я могу сделать это ...

всем: спасибо за отличный отзыв. Я делаю что-то немного прямо в личку. У каждого представления есть viewController (как я их называю). Это своего рода мой гибрид делегата / поставщика данных. Но это спорный вопрос. Это жизненный цикл гибкого компонента при работе с состояниями, который является болью. если вы измените состояние .. нет события, чтобы сказать "все мои компоненты в этом состоянии готовы". Единственное событие, чтобы сказать "мы изменили состояние". поэтому мой код, который запускается при изменении состояния, пытается общаться с компонентами, которые еще не готовы. Итак, из того, что я вижу, кажется, что нет никакого шаблона проектирования или идеального способа гарантировать, что все компоненты созданы в состоянии, если только не используется creationComplete для каждого компонента в состоянии, чтобы зарегистрировать его готовым ... если вы этого не сделаете, вы получить состояние гонки. Независимо от рамок или шаблонов проектирования, это, кажется, коренная проблема.

Текстовая область - это простое исправление PM. Просто свяжите его со значением PM. Но иногда я не могу.

В частности, я пытаюсь прикрепить видео к дисплею, когда попадаю в это состояние. Это делается с помощью addchild. независимо от того, где я это делаю .. Мне нужно знать, что videoDisplay завершил загрузку, прежде чем я вызову addchild. Я даже попробовал событие currentStateChange, поскольку в документах говорится, что пожары продолжаются ... но, увы ... компоненты в состоянии все еще инициализируются. Так что кажется, что creationComplete - мой единственный вариант. Возможно, единственный разумный способ сохранить чистоту кода - создать все это (видеодисплей и видео), используя, как только состояние введено. Я просто надеялся, что у flex-фреймворка есть события, которые помогут мне здесь, вместо того, чтобы создавать все на лету как.

1 Ответ

0 голосов
/ 13 июля 2011

Поскольку в вашем PM есть ссылка на визуальный компонент (myTextArea), это не совсем чистая форма модели презентации. Похоже, что это скорее контролирующий тип докладчика / контроллера.

Тем не менее, я бы решил, что ваша проблема будет заключаться в прямом использовании полного презентатора (без знания представления) или использовании полного контроллера (представление реализует интерфейс, через который взаимодействует контроллер). Преимущество использования презентатора во Flex заключается в том, что вы можете создать привязываемое значение, например text или selectedItem, и представление будет привязываться к этой переменной при каждом подключении к сети, поэтому проблемы, связанные с жизненным циклом компонентов Flex, исчезнут.

...