关于creationPolicy属性在一些Navigator容器控件中的应用

     由于接触flex时间不长,正在一个不习的过程中,所以有许多解决困扰后感想在这里写写。

问题:

 

    在使用Accordion折叠式多界面控件时,给第一个折叠界面中的容器加入数据与控件时没有问题,而在给第二折叠界面的容器中加入数据和控件时却出现 TypeError: Error #1009: 无法访问空对象引用的属性或方法。

    追踪后发现Accordion第二折叠界面中的容器没有初始化。查了相关资料后,发现:

    Accordion有延迟实例化组件、容器或容器内的子实例的特性,也就是说,当Accordion初始化时只会初始化显示在最前面(也就是第一折叠界面)中的子容器,而其它折叠界面中的子容器并没有被初始化,只有当要使用时才会初始化。

解决:

        Accordion有一个creationPolicy属性,这个属性有all,auto,none,默认四个值。

        当这个容器被实例时,它指示容器如何决定是否实例化它的子实例。你可   以使用MXML或者ActionScript改变这个容器中的策略。
        creationPolicy属性不会被继承。一种情况是,如果你把某个容器的creationPolicy属性值设为none,这个容器内的子容器的creationPolicy属性值依然是默认值,而不会继承父容器的creationPolicy属性值none。另一种情况是,如果两个容器同属一个等级(没有包含和被包含的关系),你把其中一个容器的creationPolicy属性值设置为非默认值后,另外那个容器的creationPolicy属性值不会随之改变,依然是默认值。

       如果你想在Accordion初始时就初始化其所有的子容器,把creationPolicy设置成all就OK了!

     

<mx:Accordion id="accordionDemo" creationPolicy="all" >
	<mx:Canvas id="canvas1' label="" width="100%" height="100%">
               		<mx:VBox  horizontalAlign="center" verticalAlign="middle" verticalGap="10" >	
		</mx:VBox>
	</mx:Canvas>
	<mx:Canvas id="canvas2'  label="" width="100%" height="100%">
               		<mx:VBox  horizontalAlign="center" verticalAlign="middle" verticalGap="10" >	
		</mx:VBox>
	</mx:Canvas>
	<mx:Canvas id="canvas3'  label="" width="100%" height="100%">
               		<mx:VBox  horizontalAlign="center" verticalAlign="middle" verticalGap="10" >	
		</mx:VBox>
	</mx:Canvas>
</mx:Accordion>

 

 

你可能感兴趣的:(Flex,actionscript)