码迷,mamicode.com
首页 > 其他好文 > 详细

ViewStack 的自动创建子项策略 creationPolicy

时间:2015-06-27 00:00:45      阅读:413      评论:0      收藏:0      [点我收藏+]

标签:viewstack creationpolicy

和UIComponent的states不同,ViewStack默认的创建策略creationPolicy=“auto”,并非跳转到某一页后,才创建INavigatorContent子项。


实际上,在ViewStack 被addChild到舞台显示列表,initialize方法被调用时,ViewStack就会创建所有的INavigatorContent子项,addChild到自身显示列表,调用各子项的initialize方法创建子项内容,不过除了当前显示的子项,并不会创建其他子项容器的子元素(INavigatorContent的实现器,mx Container和spark NavigatorContent,都是一个容器组件),会等到第一次跳转到指定容器时,创建该容器的所有子元素。


另外,作为ViewStack的INavigatorContent子项的具体组件,mx Container和spark NavigatorContent又有一些差别。

Container在被ViewStack addChild后,initialize方法执行完毕创建内容之后时,并不会调度initialize事件,因为Container覆盖了initializationComplication方法(该方法继承自UIComponent,会调度initialize事件),改成空方法。

而NavigatorContent没有覆盖这一方法。


所以,ViewStack在一开始就创建了所有INavigatorContent子项后,mx Container容器组件不会调度initialize事件,而是等到ViewStack第一次跳转到该子项页,容器创建所有子元素组件之后,才调度initialize事件,而NavigatorContent容器组件,在一开始被ViewStack addChild后,子元素组件还没有创建时,就调度了initialize事件,这时,该NavigatorContent容器所有子元素组件都尚未创建


结论:如果要让ViewStack中的某个子项——一个INavigatorContent容器组件,在其容器子元素全部创建完成后,或者ViewStack第一次转到该容器组件页后进行某种操作(如从远程服务器获取数据),则不能依赖INavigatorContent容器的initialize和creationComplete事件,因为spark NavigatorContent容器组件在调度initialize事件时,容器子元素尚未创建(经进一步测试,spark NavigatorContent调度creationComplete事件时,其子元素组件仍未创建),需要重写Container或是SkinnableContainer的createDeferredContent方法,在调用super.createDeferredContent后进行所需操作

ViewStack 的自动创建子项策略 creationPolicy

标签:viewstack creationpolicy

原文地址:http://cstar.blog.51cto.com/2923639/1666003

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!