本文参考Adobe flex 4.6 help,写作目的仅为了个人加强记忆与体会
10年积累的成都网站设计、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有锦江免费网站建设让你可以放心的选择与我们合作。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事件
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。