• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>Flah Ria>文章内容
  • 译:关于creationPolicy属性
  • 来源:riahome.cn 作者:Y.Boy 2008-07-23 【

原文:http://livedocs.adobe.com/flex/3/html/help.html?content=layoutperformance_05.html
译文:http://www.riahome.cn/?p=29

        为了延迟实例化组件、容器或容器内的子实例,你可以使用creationPolicy属性。每一个容器都有一个creationPolicy属性,当这个 容器被实例时,它指示容器如何决定是否实例化它的子实例。你可以使用MXML或者ActionScript改变这个容器中的策略。
        creationPolicy属性的有效值是:auto、all、none以及queued。这些值对于“导航容器”(navigator containers,具有多重视图的容器,如:Accordion)或者只有单一视图的容器起着不同的作用。
        creationPolicy属性不会被继承。一种情况是,如果你把某个容器的creationPolicy属性值设为none,这个容器内的子容器的 creationPolicy属性值依然是默认值,而不会继承父容器的creationPolicy属性值none。另一种情况是,如果两个容器同属一个 等级(没有包含和被包含的关系),你把其中一个容器的creationPolicy属性值设置为非默认值后,另外那个容器的creationPolicy 属性值不会随之改变,依然是默认值。

单一视图容器(Single-view containers)
        通常情况下,在开始的时候,单一视图容器就会实例化它的子实例。你可以改变creationPolicy属性值来改变这种情况。下面列出了在单一视图容器里使用creationPolicy属性的几种情况:

属性值

描述

allauto

在单一视图容器里实例化全部组件。默认值是auto,但在单一视图容器里allauto效果一样。

none

指示Flex不实例化任何组件,除非你手动实例化组件。

 

creationPolicy属性的值为none时,应该明确地指定容器的长和宽。正常情况吓,Flex会自动对容器进行比例缩放以使它能够容纳子实例,但因为creationPolicy属性的值设为none开始时没有实例化容器内的子实例,要进行比例缩放是不可能的。如果你没有明确地调整容器的大小,直到容器内的子实例被实例化后才会自动调整大小以容纳子实例。

 

要手动实例化组件,请使用createComponentsFromDescriptors()方法。更多信息请看:Creating deferred components

queued

对延迟实例化组件没有影响。关于使用queued的更多信息请看:Using ordered creation

以下例子把VBox容器的creationPolicy属性值设为auto(默认值):

  1. <?xml version="1.0"?>
  2. <!-- layoutperformance/AutoCreationPolicy.mxml -->
  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
  4.     <mx:VBox id="myVBox" creationPolicy="auto">
  5.         <mx:Button id="b1" label="Get Weather"/>
  6.     </mx:VBox>
  7. </mx:Application>

        默认情况下,单一视图容器(Single-view containers)在应用程序开始时就实例化全部子实例。如果把creationPolicy的值设为none,然而,你就可以有选择地实例化容器的 子实例通过以下技术:Creating deferred components

多重视图容器(Multiple-view containers)
        具有多重视图的容器(例如:ViewStack和Accordion)并不会马上实例化它的子实例,直到那些子实例首次被显示时。Flex延迟子实例的实 例化,直到用户打开该视图,该视图下的子实例被显示时。以下这些容器具有多个视图,所以它们都被定义为“导航容器”(navigator containers):
        ■ ViewStack
        ■ TabNavigator
        ■ Accordion
        当你实例化一个“导航容器”(navigator containers)时,Flex只会实例化该容器的顶层子实例(top-level children)。例如,新建一个Accordion容器会使它的每一个视图(View)都被实例化,但并不是实例化该视图里的组件。 creationPolicy属性的值决定实例化那些组件的方式。
当你把creationPolicy的值设为auto(默认值)时,“导航容器”(navigator containers)只会实例化那些放在第一个视图里的一开始就被显示的组件。Accordion容器的第一个视图就像下图所示:
accordion_examplebmz.png
        当用户打开其它视图时(例如选择了“3. Credit Card Information”),容器才会实例化那个视图里的组件。当然,你可以修改creationPolicy的值来改变这种策略。下面列出了在多重视图 容器里使用creationPolicy属性的几种情况:

属性值

描述

all

实例化所有视图下的全部组件。这种方式会使Flex在启动时有点慢,但实例化完毕后运行会比较畅顺。

auto

仅在初始化视图时才实例化组件。与all相反,这种方式会使Flex在启动时比较快,但实例化完毕后运行会比较慢。

 

这是多重视图容器的creationPolicy属性的默认值。

none

指示Flex不实例化任何组件,除非你手动实例化组件。

 

要手动实例化组件,请使用createComponentsFromDescriptors()方法。更多信息请看:Creating deferred components

queued

对延迟实例化组件没有影响。关于使用queued的更多信息请看:Using ordered creation

以下例子把creationPolicy属性的值设为all,当整个应用程序启动时,容器就会实例化全部子实例:

  1.  <?xml version="1.0"?>
  2. <!-- layoutperformance/AllCreationPolicy.mxml -->
  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
  4.     <mx:Panel title="Accordion">
  5.         <mx:Accordion id="myAccordion" creationPolicy="all">
  6.             <mx:VBox label="Accordion Button for Panel 1">
  7.                 <mx:Label text="Accordion container panel 1"/>
  8.                 <mx:Button label="Click Me"/>
  9.             </mx:VBox>
  10.             <mx:VBox label="Accordion Button for Panel 2">
  11.                 <mx:Label text="Accordion container panel 2"/>
  12.                 <mx:Button label="Click Me"/>
  13.             </mx:VBox>
  14.             <mx:VBox label="Accordion Button for Panel 3">
  15.                 <mx:Label text="Accordion container panel 3"/>
  16.                 <mx:Button label="Click Me"/>
  17.             </mx:VBox>
  18.         </mx:Accordion>
  19.     </mx:Panel>
  20. </mx:Application>

PS:当你遇到像N神所说的问题时,creationPolicy属性很有用!




上一篇:以Google Trends评析RIA四大技术   下一篇: 基于浏览器的 RIA 如何防止用户误点关闭或后退按钮
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)