`
bigt
  • 浏览: 45411 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Flex组件实例化的生命周期

阅读更多
新手必须掌握的内容。节选自 Adobe 的官方文档. 原文地址

组件的生命周期描述了通过组件类来创建组件对象的一系列步骤。在这个过程中Flex会自发调用组件的某些方法、派发一些事件并使组件显现出来。

下面的例子创建一个 Button 并将其添加至容器:

// 创建 Box 容器. 
var boxContainer:Box = new Box(); 

// 配置该 Box 容器

// 创建 Button 控件
var b:Button = new Button() 
// 配置该 Button 控件
b.label = "Submit"; 
... 

// 向 Box 容器添加 Button 控件
boxContainer.addChild(b);


下面分步解析代码的执行过程:

1. 调用组件的构造函数,代码如下:
// 创建一个 Button 控件
var b:Button = new Button()


2. 配置组件,为组件的属性赋值,代码如下:
// 配置该 Button 控件
b.label = "Submit";


在这里组件的setter方法可能会调用invalidateProperties(), invalidateSize(), 或 invalidateDisplayList() 方法

3. 调用 addChild() 方法添加组件到其上层,代码如下:
// 添加 Button 控件至 Box 容器
boxContainer.addChild(b);


接下来, Flex 会:

4. 设置控件的 parent 属性为其父容器。

5. 设定组件的样式

6. 在组件上派发 preinitialize 事件

7. 调用组件的 createChildren() 方法。

8. 调用 invalidateProperties(), invalidateSize(), 和 invalidateDisplayList() 方法,这些方法的调用使得下次 render 事件触发 commitProperties(), measure(), 或 updateDisplayList() 方法的执行。唯一的例外是如果用户设置了组件的 height 和 width 属性后,Flex 将不会调用 measure() 方法。

9. 在组件上派发 initialize 事件。此刻,组件的子部都已完成初始化,但尚未被设定大小及布局。您可以籍此事件对组件在展示前做某些额外处理。

10. 在父容器上派发 childAdd 事件。

11. 在父容器上派发 initialize 事件

12. 下次 render 事件发生期间,Flex 会:
 a. 调用组件的 commitProperties() 方法;
 b. 调用组件的 measure() 方法;
 c. 调用组件的 layoutChrome() 方法;
 d. 调用组件的 updateDisplayList() 方法;
 e. 大多数情况下13和14不是必须步骤,这样会在组件上派发 updateComplete 事件

13. 如果在 commitProperties(), measure(), 或 updateDisplayList() 方法内部调用了 invalidateProperties(), invalidateSize(), 或 invalidateDisplayList() 方法,Flex 会派发额外的 render 事件。

14. 在最后一个 render 事件过后,Flex 会:
 a. 设置组件的 visible 属性为 true ,呈现组件;
 b. 在组件上派发 creationComplete 事件。组件兼具了的尺寸和布局。 creationComplete 事件只在组件创建时派发唯一的一次。
 c. 在组件上派发 updateComplete 事件。而且之后无论何时,只要组件的布局、位置、大小或其它视觉特性发生的改变而导致了组件显示的更新,Flex都会派发额外的 updateComplete 事件。

在组件被放到某个具体的容器中之前,Flex无法确定组件的尺寸,样式以及如何在屏幕上绘制。基于此,组件绝大部分的配置工作都是在通过 addChild() 方法将其添加到容器时才完成的。

如果用 MXML 也可以,代码如下:
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:s="library://ns.adobe.com/flex/spark"> 
    <mx:Box> 
        <mx:Button label="Submit"/> 
    </mx:Box> 
</s:Application>


执行步骤上,MXML 和 ActionScript 没有什么区别。

可以通过容器上的 removeChild() 方法来移除一个组件。组件一旦没有被引用,它最终会被 Flash Player 或 AIR 的垃圾回收机制从内存中清除。
分享到:
评论

相关推荐

    flex 4 生命周期

    首先,组件的创建过程始于`initialize`事件,这是组件实例化后首次允许开发者进行属性设置的时刻。接着,`creationComplete`事件标志着组件的所有子组件都已创建并初始化完成,此时可以访问和操作组件树。 布局阶段...

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

    Flex组件的生命周期是Adobe Flex应用程序开发中的核心概念,它涵盖了组件从创建到销毁的各个阶段。在Flex中,每个UI组件都有一个明确的生命周期,这个生命周期由一系列的事件和方法组成,开发者可以通过这些事件和...

    flex3组件和框架的生命周期

    在子类创建阶段,会实例化这个自定义子类,并进行进一步的初始化工作。 **子类显示阶段** 一旦所有必要的初始化工作完成,Flex框架就会显示应用程序的主界面。这意味着用户现在可以看到应用程序的UI,并开始与其...

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

    1. 构造阶段:组件实例化,初始化基本属性。 2. 添加阶段:组件被添加到容器中,可能触发容器的布局过程。 3. 初始化阶段:组件的初始化方法执行,如设置初始值和绑定事件监听器。 4. 失效机制阶段:组件在不活动时...

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

    ### 理解Flex3的组件和框架的生命周期 #### Flex3组件与框架生命周期解析 Flex3是一款由Adobe推出的开源富互联网应用(RIA)开发框架,主要基于ActionScript 3.0语言。Flex3框架的强大之处在于其为开发者提供了...

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

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

    Flex3组件和框架的生命周期

    这是组件生命周期的开始阶段,主要完成组件实例化的过程。在这个阶段中,调用组件的构造函数进行初始化操作。此时,组件还没有被添加到显示列表中,也无法获取到任何父级容器的信息。 **组件的添加阶段** 一旦组件...

    Flex 自定义组件ImageViewer

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

    Flex入门实例教程

    二、Flex组件库 Flex提供了一个丰富的组件库,包括各种UI元素,如数据网格、图表、表单组件等。教程会教你如何利用这些组件快速构建用户界面,并通过样式和皮肤定制它们的外观。 三、Flex与数据交互 Flex能够轻松地...

    flex简单实例。flex比较简单的 组件特效,对初学者有很大帮助

    1. **组件生命周期**:每个Flex组件都有其特定的生命周期,包括初始化、测量、布局、绘制和更新阶段。了解这些阶段能帮助开发者更好地控制组件的行为。 2. **数据绑定**:Flex支持双向数据绑定,这意味着组件的属性...

    精讲Flex4组件开发(附源码)

    这个框架基于ActionScript编程语言和Flex组件库,允许开发者创建具有丰富图形、交互性和动态效果的Web应用程序。"精讲Flex4组件开发"的主题深入探讨了Flex4中的组件开发技术,特别是聚焦于Spark组件架构,这是Flex4...

    flex教程实例详解

    此外,还会介绍Flex中的事件处理、数据绑定和组件生命周期等核心概念。 “Flex部署”章节则关注如何将完成的Flex应用程序发布和部署到Web服务器,包括配置、打包和优化等环节。这部分内容对于开发者来说至关重要,...

    flex3_4 lifecycle

    1. **构造函数**:组件实例化时被调用,用于设置初始属性。 2. **createChildren()**:在此方法中,子组件被创建并添加到组件树中。 3. **measure()**:组件根据其内容和约束来计算理想的尺寸。 4. **layoutChildren...

    flex中的组件重写例子

    1. **实例化**:当需要组件时,Flex会创建组件实例。 2. **初始化**:组件会调用initialize()方法进行初始化,加载初始数据和设置默认值。 3. **布局**:组件调用测量(measure)和布置(layout)方法来确定其大小和...

    Flex的组件

    2. **组件生命周期**:每个Flex组件都有自己的生命周期,包括创建、初始化、显示、隐藏和销毁等阶段。理解这些阶段对于优化性能和处理组件状态至关重要。 3. **组件属性和事件**:每个组件都有一系列可配置的属性,...

    Flex4 Life cycle

    1. **Creation Complete**:组件实例被创建并初始化,所有属性和子组件都已设置完毕。这是开始处理依赖于组件完全创建的事件的合适时机。 2. **Preinitialize**:在组件的外观(皮肤)开始加载之前调用,用于进行...

    Flex3+组件拖放教程

    通过深入理解`DragManager`、`DragSource`的工作原理以及拖放事件的生命周期,开发者可以实现复杂且具有个性化的拖放交互。这个教程“Flex3+组件拖放教程--一路风尘.pdf”很可能会详细解释这些概念,并通过实例代码...

    Flex Application 初始化顺序

    Flex Application 初始化顺序是一个重要的概念,尤其对于开发Adobe Flex应用程序的开发者来说,理解这一流程能帮助他们更好地优化代码和管理应用程序的生命周期。Flex是基于ActionScript和MXML的框架,用于构建富...

Global site tag (gtag.js) - Google Analytics