老调长谈的Flex4.6可视组件的生命周期

本文参考Adobe flex 4.6 help,写作目的仅为了个人加强记忆与体会

创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的曲阳网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

Flex 4以上版本中,可视组件分为spark和halo两套,spark用组件类和皮肤类的分离大大提高了对自定义外观的支持,特别是对于某些子皮肤部件移动位置改变布局的自定义外观,再也不需要大费周章的重写组件的updateDisplay方法了。

两套组件在生命周期上其实差别不大

spark组件
var btn:Button=new Button();
btn.label="按钮";

var box:VGroup=new VGroup();
box.addElement(btn);
Halo组件
var btn:Button=new Button();
btn.label="按钮";

var box:VBox=new VBox();
box.addChild(btn);

1、调用构造函数

var btn:Button=new Button();

2、设置组件属性

btn.label="按钮";

设置属性可能会调用组件的相关失效方法如

invalidateProperties,invalidateSize,

invalidateSkinState(仅spark SkinnableComponent组件),invalidateDisplayList;

需要注意的是,如果此时可视组件并未添加到舞台,则组件的nestLevlel为0,即使调用了以上失效方法,LayoutManager也不会把组件添加到验证序列,也就是说,相关的验证方法(commitProperties、measure、updateDisplayList)也并不会在下一个渲染事件时执行。而是会等到该可视组件添加到舞台之后,重新设置UIComponent的nestLevel时,再调用updateCallbacks方法,才会调用LayoutManager的失效方法把该可视组件添加到验证序列中,等到下一个render事件(或是ENTER_FRAME事件)中调用组件的相关验证方法

3、把可视组件添加到舞台

spark组件使用addElement,Halo组件使用addChild。

4、设置组件的parent属性

5、计算组件的style设置

6、组件调度preinitialize事件

7、组件调用createChildren方法

Halo组件在createChildren方法中创建子组件,并侦听子组件的相关事件。

而spark SkinnableComponent组件在createChildren方法中调用validateSkinChange→再调用attachSkin方法,在attachSkin方法中创建skin,添加到组件类显示列表上,然后调用findSkinParts方法,循环skin实例中的皮肤部件,把每个皮肤部件的id和皮肤部件实例对象本身作为参数调用partAdded方法,组件开发者一般在partAdded方法中给皮肤部件添加事件侦听。findSkinParts完成后,会调用invalidateSkinState方法(该方法仅检测skinStateIsDirty布尔标志变量是否为true,不为true则设为true,调用invalidateProperties方法)

8、调用失效方法

invalidateProperties,invalidateSize,

invalidateSkinState(仅spark SkinnableComponent组件),invalidateDisplayList;

9、组件调度initialize事件,此时子组件已创建完毕,但尚未布局、设置尺寸。

10、父容器组件调度elementAdd(spark)或childAdd(Halo)事件

11、父容器组件调度initialize事件

12、在SystemManager(Flex程序的真正主类)的下一个render事件调度时,组件调用相关的验证方法如

commitProperties,measure(如果设置了显示尺寸值,则不会调用),updateDisplayList。

spark SkinnableComponent组件的commitProperties方法会检测skinStateIsDirty布尔标志变量,如果为true,则会调用getCurrentSkinState方法获取skin应有的可视状态State,然后将其设为skin的currentState属性

13、如果在验证方法调用的过程中,再次调用了失效方法,则会在SystemManager的再下一个render事件中,再次调用组件的验证方法

14、最后一个render事件中,组件的验证方法(没有再次调用失效方法)执行完毕后,设置组件visible为true,调度creationComplete事件(仅在组件创建完成时调度一次)

15、调度updateComplete事件。可视组件每次因为布局、位置、尺寸等变化而更新组件显示完成后,都会调度updateComplete事件

文章标题:老调长谈的Flex4.6可视组件的生命周期
网页地址:https://www.cdcxhl.com/article2/iiiioc.html

成都网站建设公司_创新互联,为您提供企业网站制作外贸网站建设软件开发搜索引擎优化网站内链Google

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设