Жизненный цикл компонента Flex, порядок событий - PullRequest
0 голосов
/ 19 июля 2010

Я в замешательстве по поводу порядка событий systen.Согласно книге, событие childAdd родительского контейнера должно запускаться после запуска событий PreInitialize и Initialize дочернего объекта, в то время как в соответствии с выходом программы это выглядит иначе.Пожалуйста, помогите.

В книгах я нашел следующее:

\ Container ---------- Компонент

Preinitialize

------------------ Преинициализировать

------------------ Проинициализировать

childAdd

Инициализировать

------------------ creationComplete

------------------ updateComplete

creationComplete

updateComplete

===========================================================================================

В то время как я попробовал себя, как показано нижеЭто операторы трассировки, которые были напечатаны в соответствующих обработчиках событий.

Преинициализировать в приложении

CreateChildren в приложении

---------------- Конструктор MyContainer

childДобавить в приложение

---------------- PreInitialize MyContainer

---------------- CreateChildren MyContainer

-------------------------------- Конструктор ChildContainer

---------------- childAdd MyContainer

------------------------------- PreInitialize ChildContainer

------------------------------- CreateChildren ChildContainer

------------------------------- Инициализировать ChildContainer

---------------- Инициализируйте MyContainer

Пожалуйста, найдите код ниже:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  layout="vertical"
 xmlns:local= "*" childAdd="handleChildAddApp()" initialize="handleInitializeApp)"
 preinitialize="handlePreinitializeApp()"> 
     <local:MyClass id="MyContainer" preinitialize="handlePreinitializeOuter()" childAdd="handleChildAddOuter()" initialize="handleInitializeOuter()" title="Outer">
         <local:MyPanel id="ChildContainer" preinitialize="handlePreinitializeInner()" initialize="handleInitializeInner()" />
     </local:MyClass>
     <mx:Script>
    <![CDATA[

        public function handlePreinitializeApp():void {

            trace('Preinitialize in Application');

        }


        override protected function createChildren():void {

            trace( "CreateChildren in Application" );

            super.createChildren();

        }


        public function handleChildAddApp():void{

            trace('childAdd in Application');

        }


        public function handleInitializeApp():void{

            trace('Initialize Application');

        }


        public function handleCreationCompleteApp():void{

            trace('CreateChildren in Application');

        }

        public function handlePreinitializeOuter():void{

            trace('PreInitialize MyContainer');

        }


        public function handleChildAddOuter():void{

            trace('childAdd MyContainer');

        }

        public function handleInitializeOuter():void{

            trace('Initialize MyContainer');



        }

        public function handlePreinitializeInner():void{

            trace('PreInitialize ChildContainer');

        }


        public function handleInitializeInner():void{

            trace('Initialize ChildContainer');

        }


    ]]>

</mx:Script>

Спасибозаранее.

Ответы [ 4 ]

2 голосов
/ 19 июля 2010

Трудно сказать из ваших операторов трассировки, как структурирован ваш код, и я не совсем ясно по вашему вопросу, но вот хорошая диаграмма, показывающая поток событий для жизненного цикла компонента, который я часто использовал:http://danorlando.com/?p=122 Надеюсь, это поможет.

0 голосов
/ 01 августа 2013

Вы можете обратиться к этой странице, здесь они четко указали жизненный цикл и использование различных фаз

http://technobytz.com/flex-preinitialize.html

0 голосов
/ 24 августа 2010

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

Помните, что есть два добавляемых дочерних события: childAdd, childAdded

Тот, что до запуска жизненного цикла ребенка, и тот, что после. Убедитесь, что вы ищете ожидаемое событие.

0 голосов
/ 19 июля 2010

Основная документация:

http://www.adobe.com/livedocs/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=containers_intro_063_12.html

http://unitedmindset.com/jonbcampos/2009/02/12/deferred-component-instantiation-in-actionscript/

http://livedocs.adobe.com/flex/3/html/help.html?content=layoutperformance_04.html

То, с чем вы можете столкнуться - это «политика отложенного создания». Проверьте вышеуказанные ссылки и посмотрите на creationPolicy="all".

...