温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

老调长谈的Flex 4.6 可视组件的生命周期

发布时间:2020-06-13 18:13:04 来源:网络 阅读:526 作者:qqskynet 栏目:大数据

本文参考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事件




向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI