Apache flex 我应该在什么时候覆盖1个生命周期方法?

Apache flex 我应该在什么时候覆盖1个生命周期方法?,apache-flex,Apache Flex,我在《flex开发者指南》中读到,有时需要重写一个 生命周期方法,如:commitProperties和updateDisplayList 但我已经编写了一些flex应用程序,而不需要实现它们。 什么时候需要覆盖它们?首先,我100%建议您通过以下方式学习本演示文稿: 本文件由以下人员编写: 它们涉及到文档中永远找不到的东西,但对于理解Flex组件生命周期来说非常实用 根据我的经验,您唯一需要担心覆盖核心生命周期方法的时间是在创建组件时。我区分了应用程序视图和组件 组件是需要近乎完

我在《flex开发者指南》中读到,有时需要重写一个 生命周期方法,如:commitProperties和updateDisplayList 但我已经编写了一些flex应用程序,而不需要实现它们。
什么时候需要覆盖它们?

首先,我100%建议您通过以下方式学习本演示文稿:

本文件由以下人员编写:

它们涉及到文档中永远找不到的东西,但对于理解Flex组件生命周期来说非常实用

根据我的经验,您唯一需要担心覆盖核心生命周期方法的时间是在创建组件时。我区分了应用程序视图和组件

  • 组件是需要近乎完美、高度优化和极其通用/抽象的东西
  • 视图是您可能只在一个应用程序中需要的东西,但如果您愿意,可以重用(LoginScreen、ContactForm等)
大多数情况下,视图只是将内容添加到更通用组件(画布、组、容器、VBox、列表等)的显示列表中。作为视图/应用程序开发人员,您并不真正关心“dataProvider”如何创建它的ItemRenders,它只是工作

不过,组件是另一回事。当您创建一个组件时,您希望它完全适合Flex设置的系统:组件生命周期。当你第一次尝试像他们一样构建一个组件时,这是相当困难的,但是当你把你的头绕在它周围之后,这是非常容易的。以下是我在开发组件时对方法的看法:

createChildren()

  • 构造组件时调用一次
  • 叫自上而下。因此,如果
    面板
    调用
    createChildren
    ,则
    createChildren
    方法将对其所有子级调用
    addChild
    ,调用
    createChildren
  • 如果您创建了一个自定义组件,例如StartatingComponent,则在构建组件时,您可能希望在阶段中添加5颗星。因此,您需要重写
    createChildren()
    ,以便为您所在的组件添加星星。不过,默认情况下,FlexSDK中的所有容器组件都会在此处添加它们的子组件(列表的方式稍有不同),因此,如果您正在构建MXML视图或其他不可重用的内容,则不必这样做

    设置属性后,接下来的3个方法称为1帧

    measure()

  • 如果父对象没有任何大小(百分比或显式),则需要根据其子对象的大小调整大小。这只能自下而上发生(我花了很长时间才真正意识到这一点)
  • 如果父级具有显式大小或百分比大小,则跳过此步骤
  • 如果您想:

  • measuredWidth
    measuredWidth
    返回一个有用的值。因此,如果您构建自定义CoverFlowContainer组件,并且未设置
    measuredWidth/measuredHeight
    (因为
    measure
    未被覆盖),那么如果您未在CoverFlowContainer上指定任何大小,则它将为0宽0高。因此,替代
    measure
    ,并将其设置为
    measuredWidth
    半径*2或类似的值,现在您不需要给它一个大小
  • 如果组件没有明确的大小或百分比大小,则将使用度量来调整组件的大小。否则它将被跳过
  • 委托财产

  • measure
    之后调用
  • 将所有属性更改(从在组件上设置属性)应用于组件(它们存储在第一帧的专用变量中)
  • 在初始属性设置后调用帧
  • 在我看来,这是最重要的覆盖方法。因此,对于您的CoverFlowContainer,假设您设置了假设的
    距离
    间隙
    选择的编辑项
    ,以及
    倾斜
    属性。设置它们时,将它们存储在私有变量中。Flex将等待一帧,然后调用
    commitProperties
    。在覆盖的
    commitProperties
    中,您可以说
    layout.updateEverything(选择editem、distance、gap、tilt)可以这么说。因此,这是您重写的方法,以使所有属性更改同时应用

    更新显示列表

  • 在提交属性之后调用
  • 叫自上而下
  • 您只需覆盖此设置即可在组件上设置可见属性,例如
    setActualSize
    graphics
    等。但现在(由于“commitProperties”),您已经拥有了将显示集更新为正确值所需的所有变量

    总体

    因此,根据我的经验,在为我将在一百万个项目中使用的东西创建组件库时,我大量使用了这些生命周期方法:

    • TitleWindow(我自己的版本)
    • View3D(适用于Away3D/Papervision)
    • Flex4的树和堆栈
    • 文本区(带提示、可扩展等)
    • 工具提示(更易于蒙皮工具提示)
    我需要确保所有内容都按照生命周期进行了更新和完美渲染。阅读和理解这些方法确实有助于澄清何时重写这些方法。正如(Flex框架的非常简单、清晰的替代方案。功能不丰富,所以它展示了如何通过简单的方式覆盖这些方法来完成一些非常高级的事情)

    当我开发应用程序并制作诸如
    AdvertismentView
    MenuView
    LoginView
    之类的东西时,我从来没有考虑过它,因为我使用的所有组件都已经解决了这些问题(ViewStack、Group、List等)。我基本上只是设置他们定义的属性