理解自定义组件

原文:http://www.billdwhite.com/wordpress/?p=21
理解组件的生命周期
组件的生命周期是一系列被flex框架调用的方法,这是每个组件都会经历的。这些方法包括:
  • The component’s constructor
  • The commitProperties() method
  • The createChildren() method
  • The measure() method
  • The updateDisplayList() method
分开来讲:
1,constructor()
在构造函数里,你可以设置初始的属性,做些不管组件是否在屏幕上显示过都需要处理的事情。你不应该做这些事:创建子元素和定位,因为这个阶段你还没有足够的信息。构造方法在组件被创建的时候调用,生命周期里的其他方法直到一个组件被加到一个容器里才会被调用。
1 var blah:Button = new Button(); // invokes the constructor
2 container.addChild(blah);       // adds the component to a container,  triggering the other lifecycle methods

2,createChildren()
这个方法用来创建任何可视的子元素(children),但是,只是创建子元素并不定义大小和位置,因为你的组件还不知道它有多少的屏幕空间。当你还不知道你有多大的操作空间时,你不能告诉你的子元素它们能有多大。也就是说,这是由component的空间你还不知道,如何定义它的children的大小?定位也一样。

3,measure()
调用measure()方法,用来决定一个组件所要求的屏幕空间。这个方法负责设置一个组件的四个属性:
  • measuredMinWidth
  • measuredMinHeight
  • measuredWidth
  • measuredHeight
这些元素只是一个组件对其父元素建议的大小,这里就是updateDisplaylist进入的地方。这个measure方法也会调用layout manager。布局管理器负责确保设置组件大小的程序被开始。布局管理器通常从最外面的组件开始。要想知道一个组件需要多大地方,首先得知道他的子元素要多大地方。

4,updateDisplayList
当在一个组件上调用updateDisplayList方法,这个方法被传递了两个参数:unscaledWidth,unscaledHeight。基本的,他告诉你‘不要考虑你要求的,这里是你得到的’。你可以选择忽略组建的建议宽度和高度,而给他设置任意你先要的大小。如果它的高度和宽度不足以容纳所有的组件,那么滚动条将出现。这个方法也负责定位子组件。

5,commitProperties
这个属性是为了协调属性的更改,为什么要协调属性呢?因为有些时候你想要等待不止一个的你所依靠的属性被设置好了。也有些时候你不想改变一发生就调用个复杂的方法。所以呢,这个方法就能够让你拖延上面的事情直到屏幕需要被重绘,因为这个方法是被flex framework预定的,当需要的时候会被调用。

如何告知framework上述那些方法被需要呢?
  • invalidateDisplayList()
  • invalidateProperties()
  • invalidateSize()
这些方法告诉flex framework呀确保这些方法要在下次合适的时间被调用。
我们必须记住下面这些要点:
1,constructor-------设置一些东西但是不创建子元素和定位元素。
2,createChildren-------创建子元素但是不设置他们的大小和定位他们。
3,measure------------确定需要的屏幕空间。
4,invalidateSize---------告诉Flex去重新测量某些东西。
5,updateDisplayList---------得到unscaledWidth和unscaledHeight。你可以用它也可以忽略它。可以定位元素。
6,invalidateDisplayList--------让flex框架调用updateDisplayList方法
7,commitPorperties----------协调属性的更改
8,invalidateDisplayList-----------让flex调用invalidateDisplay方法





原文地址:https://www.cnblogs.com/orchid/p/1561440.html