我对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>
提前致谢。
答案 0 :(得分:2)
很难从你的跟踪语句中看出你的代码是如何构建的,我对你的问题并不完全清楚,但是这里有一个很好的图表,显示了我经常使用的组件生命周期的事件流: http://danorlando.com/?p=122希望有所帮助。
答案 1 :(得分:0)
基本文档:
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"
。
答案 2 :(得分:0)
我不会指责,但我要说的是某处可能会有些混乱。
请记住,有两个添加子事件:childAdd,childAdded
一个在孩子的生命周期启动之前,一个在之后。确保您正在寻找您期望的活动。
答案 3 :(得分:0)
您可以在此处参考此页面,他们已明确指定生命周期和不同阶段的使用