flex组件在建立的时候都会经历四个事件:preinitialize, initialize, creationComplete和updateComplete(updateComplete事件在任何改动视觉的情况下都会发生,不是初始化时独有的)。我这里有个例子来检测在嵌套和平行的情况下,测试各个组件的事件抛出顺序。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
preinitialize="showEvent(event)"
initialize="showEvent(event)"
creationComplete="showEvent(event)"
updateComplete="showEvent(event)">
<mx:Script>
<![CDATA[
import flash.utils.getTimer;
private function showEvent(event:Event):void
{
trace(flash.utils.getTimer().toString()+" >> "+event.currentTarget.name+" "+event.type);
}
]]>
</mx:Script>
<mx:Canvas id="canv1"
preinitialize="showEvent(event)"
initialize="showEvent(event)"
creationComplete="showEvent(event)"
updateComplete="showEvent(event)">
<mx:Button id="btn1"
preinitialize="showEvent(event)"
initialize="showEvent(event)"
creationComplete="showEvent(event)"
updateComplete="showEvent(event)"/>
</mx:Canvas>
<mx:Button id="btn2"
preinitialize="showEvent(event)"
initialize="showEvent(event)"
creationComplete="showEvent(event)"
updateComplete="showEvent(event)"/>
</mx:Application>
它的输出是:
1299 >> eventTest0 preinitialize
1307 >> canv1 preinitialize
1310 >> btn1 preinitialize
1318 >> btn1 initialize
1319 >> canv1 initialize
1320 >> btn2 preinitialize
1321 >> btn2 initialize
1321 >> eventTest0 initialize
[SWF] G:\projects\eventTest\bin-debug\eventTest.swf - 588,818 bytes after decompression
1387 >> btn1 creationComplete
1387 >> btn1 updateComplete
1387 >> canv1 creationComplete
1387 >> canv1 updateComplete
1388 >> btn2 creationComplete
1388 >> btn2 updateComplete
1388 >> eventTest0 creationComplete
1390 >> eventTest0 updateComplete
看着有点混乱,不过仔细看看,可以把过程分成两个部分。很明显,所有的creationComplete和updateComplete发生在第二次update的时候,之前flex组件只是做一些设置和计算的工作,并没有在画布上画任何东西。除此以外,还有这么一些规律:
就单个组件而言,事件的抛出顺序是preinitialize,initialize,creationComplete
嵌套关系的两个组件(比如Canvas和button1),preinitialize先外后内,initialize和creationComplete先内后外。只是creationComplete要在下一次update才会发生。
平行关系的两个组件(比如Canvas和button2),按mxml内的顺序,只有前面组件initialize结束后,后面的组件才会抛出preinitialize。
引用别人的文章!
分享到:
相关推荐
总之,理解Flex组件的生命周期对于正确处理组件初始化至关重要。在开发自定义组件时,必须确保在适当的生命周期阶段执行相应的操作,以避免因过早访问未初始化的属性而导致的问题。通过合理利用组件生命周期中的事件...
理解组件生命周期至关重要,因为它涉及到组件何时初始化、何时准备显示、何时接收用户输入以及何时被销毁。以下是一些关键的生命周期方法: 1. **initialize()**: 当组件实例的所有属性都已设置且即将显示时,Flex...
- **`UIComponent.createChildren()`**:用于创建组件的子组件。 - **`UIComponent.commitProperties()`**:用于提交组件属性的变化,特别是在计算尺寸时需要用到的属性。 - **`UIComponent.measure()`**:用于...
这里通常用来初始化组件的内容和结构,但不涉及子组件的布局和定位。而`updateDisplayList()`方法则用于在测量阶段之后,根据组件的尺寸和位置属性来定位和绘制子组件,包括它们的大小和位置。 布局方面的定制,...
在这个阶段,应用程序会创建并初始化所有的子组件。每个子组件都会依次经历自己的生命周期阶段。 **Flex应用程序的子类显示阶段** 子组件创建完成后,进入显示阶段。这时,所有组件已经被添加到显示列表中,准备...
一旦组件初始化并显示出来,Flex应用程序就开始监听和处理各种用户交互事件,如点击、滚动等。 10. **运行时行为**: 应用程序进入运行模式,用户可以与界面交互,同时后台逻辑和数据绑定会持续工作,确保应用...
最后,`applicationComplete`事件表示所有组件初始化并显示完毕。 在Application对象的生命周期中,一般顺序如下: 1. 创建Application对象实例。 2. 初始化Application的systemManager。 3. Application派发`...
- **诞生阶段**:在这个阶段,组件被创建并初始化。主要事件包括`creationComplete`等。 - **生命期阶段**:组件处于活动状态,响应用户的交互和数据变化。这一阶段涉及到的事件较多,例如`propertyChange`、`data...
在这个阶段,组件对象被创建,并且其属性和事件监听器被初始化。构造函数负责组件的基本配置和初始状态设置。 **添加阶段** 组件被添加到显示列表中的过程称为添加阶段。此时,组件开始接收来自Flex框架的事件通知...
在理解Flex4组件生命周期方面,学习者会了解到组件从创建到销毁的各个阶段,包括初始化、测量、布局、绘制和更新。掌握这些生命周期方法对于优化性能和处理用户交互至关重要。例如,`createChildren()` 方法用于创建...
Flex组件的生命周期是Adobe Flex框架中一个至关重要的概念,它涉及到UIComponent类及其子类(如Button、Canvas等)在创建、初始化、显示和销毁过程中的各个阶段。深入理解组件生命周期有助于开发者更有效地管理组件...
这通常是在组件的初始化代码中完成的,通过调用`setDragEnabled(true)`方法来启用组件的拖动功能。同时,需要指定拖动开始时的源数据,这可以通过创建一个`DragSource`实例并将其附加到组件上实现。例如: ```...
在这个阶段,组件执行更深层次的初始化任务,如绑定事件监听器、配置子组件等。开发者可以通过覆盖`initialize()`方法来自定义初始化行为。 #### 失效机制阶段 在这一阶段,组件可能会因各种原因而失效,比如用户...
Flex应用程序在发布时会生成一个特殊的SWF文件,其内部结构对于理解应用程序如何加载和初始化至关重要。该SWF文件具有以下特点: 1. **双帧结构**:Flex生成的SWF文件是一个两帧的MovieClip。这种设计的主要目的是...
4. **初始化显示已选择项** 当页面加载时,该组件能够自动显示之前用户已选择的选项,这提高了用户体验,因为他们无需再次手动设置。这种功能通常是通过存储和恢复用户偏好来实现的,可能涉及到本地存储或服务器端...
- **利用初始化阶段**:初始化方法是设置组件状态和事件监听器的理想位置。这里可以处理更复杂的初始化逻辑。 - **分离生命周期阶段**:将不同的生命周期阶段分开处理,确保每个阶段只关注自己的任务,这样可以使...
3. 初始化阶段:组件的初始化方法执行,如设置初始值和绑定事件监听器。 4. 失效机制阶段:组件在不活动时进入无效状态,减少不必要的计算和更新。 5. 生效机制阶段:组件重新变得有效,进行必要的更新和重绘。 6. ...
3. Flex组件生命周期:从创建到销毁的过程,包括初始化、测量、布局、绘制等阶段。 4. Event-driven编程:Flex应用主要依赖事件驱动模型,轮弹组件会监听并响应用户的滚动操作。 5. 组件状态管理:了解组件在不同...
1. **实例化**:当需要组件时,Flex会创建组件实例。 2. **初始化**:组件会调用initialize()方法进行初始化,加载初始数据和设置默认值。 3. **布局**:组件调用测量(measure)和布置(layout)方法来确定其大小和...