`

Flex组件生命周期

阅读更多
Flex组件在初始化阶段会依次触发下列的几个事件:

 preinitialize  -  当组件在创建的原始阶段触发,它的子元素都还没有创建
 initialize  -  当组件及其子元素都已经创建完毕的时候触发,但此时组件的大小尺寸还没有决定
 creationComplete  -  当组件布局完成并显示之后触发

因此,我们一般在initialize的时候,可以对组件上要显示的字符信息等进行设置;尤其是在该时刻设置和组件尺寸相关的值。而要获取和组件布局相关的信息的操作,则放在creationComplete时。

 

Flex组件的实例化生命周期

我们来看下面这段MXML代码:

<?xml version=”1.0″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml“>
    <mx:Box id=”box1″ width=”200″>
        <mx:Button id=”button1″ label=”Submit”/>
    </mx:Box>
</mx:Application>

和这段MXML等同的ActionScript代码是:

var box1:Box = new Box();
box1.width=200;

var button1:Button = new Button()
button1.label = “Submit”;

box1.addChild(button1);

其实,当你用MXML创建组件时,Flex SDK会生成相应的AS代码,以上代码在看似简单,但在执行过程中会发生很或的事情,我们来看下创建Button组件时执行的流程:
1)调用构造方法来创建实例
var button1:Button = new Button();

2)对创建的Button实例设置属性
button1.label = “Submit”;

3)调用Button实例的addChild()方法把按钮添加到父容器中
box1.addChild(button1);

在调用这行代码的时候,将会产生以下动作:
a.设置组件实例的parent属性,使其关联到父容器
b.设置组件实例的样式
c.触发组件实例的add事件
d.触发父容器的childAdd事件
e.触发组件实例的preinitialize事件,触发时,组件实例处于非常原始的状态
f.创建组件实例的子元素
g.组件触发initialize事件,此时,组件和其子元素都已经创建完毕,但和布局相关的属性都还没有处理

4)显示应用,render事件被触发,并且会做以下处理:
a.所有涉及显示和布局相关的东西被处理完成
b.设置组件的visible属性为true
c.组件的creationComplete事件被触发
d.组件的updateComplete事件被触发

———————–官方文档————————————-

原文来自Adobe live doc

The component instantiation life cycle describes the sequence of steps that occur when you create a component object from a component class. As part of that life cycle, Flex automatically calls component methods, dispatches events, and makes the component visible.

The following example creates a Button control in ActionScript and adds it to a container:

// Create a Box container.var boxContainer:Box = new Box();// Configure the Box container. // Create a Button control. var b:Button = new Button()// Configure the button control.b.label = “Submit”;…// Add the Button control to the Box container.boxContainer.addChild(b);The following steps show what occurs when you execute the code to create the Button control, and add the control to the Box container:

You call the component’s constructor, as the following code shows:
// Create a Button control. var b:Button = new Button()You configure the component by setting its properties, as the following code shows:
// Configure the button control.b.label = “Submit”;Component setter methods might call the invalidateProperties(), invalidateSize(), or invalidateDisplayList() methods.

You call the addChild() method to add the component to its parent, as the following code shows:
// Add the Button control to the Box container.boxContainer.addChild(b);Flex performs the following actions:

Sets the parent property for the component to reference its parent container.
Computes the style settings for the component.
Dispatches the preinitialize event on the component.
Calls the component’s createChildren() method.
Calls the invalidateProperties(), invalidateSize(), and invalidateDisplayList() methods to trigger later calls to the commitProperties(), measure(), or updateDisplayList() methods during the next render event.
The only exception to this rule is that Flex does not call the measure() method when the user sets the height and width of the component.

Dispatches the initialize event on the component. At this time, all of the component’s children are initialized, but the component was not sized or processed for layout. You can use this event to perform additional processing of the component before it is laid out.
Dispatches the childAdd event on the parent container.
Dispatches the initialize event on the parent container.
During the next render event, Flex performs the following actions:
Calls the component’s commitProperties() method.
Calls the component’s measure() method.
Calls the component’s layoutChrome() method.
Calls the component’s updateDisplayList() method.
Dispatches the updateComplete event on the component.
Flex dispatches additional render events if the commitProperties(), measure(), or updateDisplayList() methods call the invalidateProperties(), invalidateSize(), or invalidateDisplayList() methods.
After the last render event occurs, Flex performs the following actions:
Makes the component visible by setting the visible property to true.
Dispatches the creationComplete event on the component. The component is sized and processed for layout. This event is only dispatched once when the component is created.
Dispatches the updateComplete event on the component. Flex dispatches additional updateComplete events whenever the layout, position, size, or other visual characteristic of the component changes and the component is updated for display.
Most of the work for configuring a component occurs when you add the component to a container by using the addChild() method. That is because until you add the component to a container, Flex cannot determine its size, set inheriting style properties, or draw it on the screen.

You can also define your application in MXML, as the following example shows:

<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml“>    <mx:Box>        <mx:Button label=”Submit”/>    </mx:Box></mx:Application>The sequence of steps that Flex executes when creating a component in MXML are equivalent to the steps described for ActionScript.

You can remove a component from a container by using the removeChild() method. If there are no references to the component, it is eventually deleted from memory by the garbage collection mechanism of Macromedia Flash Player 9 from Adobe.

————————————翻译————————————-

关于组件实例化生命周期
描述执行的序列步骤,当你从一个组件类创建一个组件时。作为生命周期的一部分,Flex自动调用组件方法,分发事件,使组件可视。
下例是在AS中创建一个按钮并增加到一个容器中:
1.调用组件的构造函数,新建一个组件:
// Create a Button control.
var b:Button = new Button()

2.通过设置它的属性,配置组件,如:
// Configure the button control.
b.label = “Submit”;

3.你调用addChild()方法来增加组件到它的父对象:
// Add the Button control to the Box container.
boxContainer.addChild(b);

Flex执行如下的动作:
a.为组件设置parent属性引用它的父容器
b.计算组件的style设置
c.在组件上分发preinitialize事件
d.调用组件的createChildren()方法
e.调用invalidateProperties(),invalidateSize(),和invalidateDisplayList()方法,以触发延迟的调用commitProperties(),measure(),或updateDisplayList()方法在下一个render事件期。
 这条规则仅有的例外是Flex不调用measure()方法当用户设置组件的height和width时。
f.在组件上分发initialize事件。在这时,组件的所有子对象被初始化,但这个组件组件还未为布局而被尺寸化或处理,你能使用这个事件来执行这个组件附加的处理,在它被布局前。
g.分发childAdd事件在父容器上
h.分发initialize事件在父容器上

4.在下一个render事件期间,Flex执行如下的行为:
a.调用组件的commitProperties()方法
b.调用组件的measure()方法
c.调用组件的layoutChrome()方法
d.调用组件的updateDisplayList()方法
e.在组件上分发updateComplete事件

5.Flex分发附加render事件,如果commitProperties(),measure(),或updateDisplayList()方法调用invalidateProperties(),invalidateSize(),或invalidateDisplayList()方法。

6.在最后的render事件执行后,Flex执行如下动作:
通过设置visible属性为ture让组件可视
分发creationComplete事件在组件上。组件为布局被sized和processed。这个事件仅被分发一次当组件被创建时。
分发updateComplete事件在组件上。Flex分发附加的updateComplete事件不管何时布局,位置,尺寸,或组件别的可视特性改变,并且组件被更新显示。

为配置一个组件的多数的工作执行,当你使用addChild()方法,增加一个组件到一个容器。这是因为,直到你增加组件到一个容器,Flex不能决定它的尺寸,设置继承的style属性,或画它在屏幕上。
在MXML里增加一个组件的步骤等效于AS中执行的步骤:
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml“>
    <mx:Box>
        <mx:Button label=”Submit”/>
    </mx:Box>
</mx:Application>
从一个容器中删除一个组件,通过使用removeChild()方法,如果没有引用到这个组件,它最终会被内存中删除,由Flash Player9的垃圾回收机制。

原创文章如转载,请注明:转载自FLEX开发乐园 [ http://www.flexswf.com ]

 

分享到:
评论

相关推荐

    【完美翻译】Flex组件的生命周期

    Flex组件的生命周期是Adobe Flex框架中一个至关重要的概念,它涉及到UIComponent类及其子类(如Button、Canvas等)在创建、初始化、显示和销毁过程...对于深入学习Flex组件生命周期,这份资料将是一份宝贵的参考资料。

    深入FLEX组件生命周期

    ### 深入理解FLEX组件生命周期 #### 一、引言 在FLEX开发过程中,深入了解组件的生命周期对于优化应用程序性能、确保组件正确响应用户交互至关重要。本文将详细解析Flex组件生命周期的主要阶段:初始化...

    Flex组件生命周期[收集].pdf

    Flex组件生命周期是软件开发中关于Adobe Flex框架的重要概念,它涉及到UIComponent的创建、初始化、显示和销毁等各个阶段。Flex应用的根对象是SystemManager,这是一个Display Class,继承自flash.display.MovieClip...

    flex 4 生命周期

    Flex 4生命周期是Adobe Flex框架的核心组成部分,它详细规定了组件从创建到销毁的过程。在Flex 3到Flex 4的进化中,生命周期有了显著的变化,这些变化旨在提高性能、可扩展性和稳定性。 Flex框架的生命周期包括了...

    flex 不错的教程

    首先,Flex组件生命周期(Flex Component Lifecycle)是指Flex框架用来创建和更新UI元素在Flash显示列表上的一系列方法和事件。当开发者编写自定义组件时,理解Flex组件生命周期是非常有益的。在组件生命周期的不同...

    导出Flex组件为jpg图片

    这个过程通常涉及一些编程技巧,包括对Flex组件生命周期的理解,以及对ActionScript(Flash Player的编程语言)的熟练掌握。 标签“源码”意味着可能在博文中会有实际的代码示例来展示如何操作。“工具”可能指的是...

    flex3_4 lifecycle

    首先,让我们了解一下Flex组件生命周期的基本概念。每个Flex组件都有一个从创建到销毁的过程,这个过程被称为组件生命周期。它包括几个关键阶段,如初始化、测量、布局、绘制以及事件处理等。这些阶段确保了组件正确...

    Flex4 Life cycle

    5. **事件处理**:Flex组件生命周期中,事件处理是非常关键的一环。组件可以监听并响应各种事件,例如用户输入、数据变化等。事件处理通常发生在`enterFrame`事件期间,这是处理动画和实时交互的理想时机。 6. **...

    Flex轮弹组件

    3. Flex组件生命周期:从创建到销毁的过程,包括初始化、测量、布局、绘制等阶段。 4. Event-driven编程:Flex应用主要依赖事件驱动模型,轮弹组件会监听并响应用户的滚动操作。 5. 组件状态管理:了解组件在不同...

    flex3组件和框架的生命周期

    - **Flex3组件生命周期** - 构造阶段 - 添加阶段 - 初始化阶段 - 失效机制阶段 - 生效机制阶段 - 更新阶段 - 移除阶段 - **Flex应用程序生命周期** - 构造阶段 - 初始化阶段 - 预加载阶段 - 子类创建阶段...

    理解Flex3的组件和框架的生命周期.doc

    在深入理解 Flex3 的组件和框架生命周期之前,我们需要先了解 Flex 的历史背景以及其运行机制。 Flex 简史: Flex 的发展始于2004年,最初由 Macromedia 开发,后来被 Adobe 收购。Flex3 是一个关键版本,引入了更...

    Flex 组件Flex 组件Flex 组件

    每个Flex组件都是一个继承自UIComponent的类,拥有自己的生命周期、样式和事件处理机制。例如,Button组件用于响应用户的点击动作,Label组件用于显示静态文本,而List组件则可以展示可选择的项目列表。 Flex组件的...

    Flex3组件和框架的生命周期

    - **Flex3组件生命周期** - 构造阶段 - 添加阶段 - 初始化阶段 - 失效机制阶段 - 生效机制阶段 - 更新阶段 - 移除阶段 - **Flex应用程序生命周期** - 构造阶段 - 初始化阶段 - 预加载阶段 - 子类创建阶段...

    理解Flex3的组件和框架的生命周期

    - **构造阶段(birth)**:这是组件生命周期的起点。在此阶段,组件被实例化,并且执行构造函数。此时组件还不存在于视图中,因此无法进行任何视觉上的操作。 - **添加阶段(birth)**:组件被添加到视图中,但尚未...

    理解Flex3组件和框架的生命周期.pdf

    #### 组件生命周期阶段概述 - **构造阶段**:组件对象被创建。 - **添加阶段**:组件被添加到显示列表中。 - **初始化阶段**:组件进行必要的初始化工作。 - **失效机制阶段**:组件的状态可能改变,例如响应用户...

    Flex_API的架构图

    这些组件是基于DisplayObject和EventDispatcher类的层次结构构建的,它们遵循Flex组件生命周期,具有创建、初始化、显示、交互和销毁等阶段。 5. **Flex Event Model**: 事件模型是Flex API的重要特性,允许组件...

    Flex 自定义组件ImageViewer

    组件生命周期是每个Flex组件从创建到销毁所经历的一系列阶段。理解组件生命周期至关重要,因为它涉及到组件何时初始化、何时准备显示、何时接收用户输入以及何时被销毁。以下是一些关键的生命周期方法: 1. **...

    Flex个人知识库之Apple组件

    7. Flex组件生命周期:从初始化到销毁的各个阶段,理解这些可以帮助优化组件性能和内存管理。 8. 触摸事件和手势识别:在Apple设备上,理解和处理触摸事件是关键,因为它们不同于传统的鼠标事件。 通过研究"flexlib...

Global site tag (gtag.js) - Google Analytics