Flex组件生命周期,事件顺序

时间:2010-07-19 15:08:02

标签: flex actionscript-3 actionscript flex3

我对systen事件的顺序感到困惑。 根据本书的说法,在触发'childIntia的'PreInitialize'和'Initialize'事件之后,应该触发'childAdd'事件,而不是按照程序看出来的情况。请帮忙。

我在书中发现的内容如下:

\ Container ---------- Component

预初始化

------------------预初始化

------------------ Ininitialize

childAdd将

初​​始化

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

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

creationComplete

updateComplete

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

虽然我自己尝试的是如下。这些是在相应事件处理程序中打印的跟踪语句的o / p。

在申请中预先初始化

Application中的CreateChildren

---------------- MyContainer的构造函数

应用程序中的childAdd

---------------- 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 个答案:

答案 0 :(得分:2)

很难从你的跟踪语句中看出你的代码是如何构建的,我对你的问题并不完全清楚,但是这里有一个很好的图表,显示了我经常使用的组件生命周期的事件流: http://danorlando.com/?p=122希望有所帮助。

答案 1 :(得分:0)

答案 2 :(得分:0)

我不会指责,但我要说的是某处可能会有些混乱。

请记住,有两个添加子事件:childAdd,childAdded

一个在孩子的生命周期启动之前,一个在之后。确保您正在寻找您期望的活动。

答案 3 :(得分:0)

您可以在此处参考此页面,他们已明确指定生命周期和不同阶段的使用

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