原文: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属性的几种情况:
|
属性值 |
描述 |
|
all,auto |
在单一视图容器里实例化全部组件。默认值是auto,但在单一视图容器里all与auto效果一样。 |
|
none |
指示Flex不实例化任何组件,除非你手动实例化组件。
当creationPolicy属性的值为none时,应该明确地指定容器的长和宽。正常情况吓,Flex会自动对容器进行比例缩放以使它能够容纳子实例,但因为creationPolicy属性的值设为none,开始时没有实例化容器内的子实例,要进行比例缩放是不可能的。如果你没有明确地调整容器的大小,直到容器内的子实例被实例化后才会自动调整大小以容纳子实例。
要手动实例化组件,请使用createComponentsFromDescriptors()方法。更多信息请看:Creating deferred components |
|
queued |
对延迟实例化组件没有影响。关于使用queued的更多信息请看:Using ordered creation |
以下例子把VBox容器的creationPolicy属性值设为auto(默认值):
默认情况下,单一视图容器(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容器的第一个视图就像下图所示:

当用户打开其它视图时(例如选择了“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,当整个应用程序启动时,容器就会实例化全部子实例:
PS:当你遇到像N神所说的问题时,creationPolicy属性很有用!
admin#flashas.net (#为@) 联系QQ:
:40777822
浙ICP备06033001号