Flex4 对 View State 管理的增强
[原文出处: http://swfever.com/?p=717]
本章我们将介绍Flex 4中其他与视图状态相关的新特性和变化,包括:
控制组件的创建和销毁 状态组 Base State <fx:Reparent>标签?
控制组件的创建和销毁在上一章登录/注册对话框的例子中,当我们将视图状态切换到register时,会需要创建一个额外的Label组件和TextInput组件作为密码确认的输入框,当切换回login状态时,这些组件又将不再显示。这就引发了两个问题:
何时创建那些只在某些特定状态出现的组件? 当某个组件不出现在当前状态中时,是否需要销毁该组件?事实上,这两个问题的答案都取决于开发者的需求。如果我们选择初始化阶段创建所有组件,那么在状态切换时,你会获得更短的响应时间,但是会增加不必要的内存占用。如果你选择只在需要时创建组件并在不需要时将其销毁,那么内存占用会更加合理,但是相应地,你需要更多的响应时间来完成创建和销毁组件的工作。
无论如何,Flex 4提供了非常简便的方式来满足你的需求:
控制组件的创建时机 - itemCreationPolicy属性
deffered (默认) – 直至切换到包含当前组件的状态时才创建 immediate – 立即创建组件,而不管当前的状态如何控制组件的销毁时机 - itemDestructionPolicy属性
never (默认) - 组件一旦创建就不会被自动销毁 auto – 当离开包含该组件的状态时,组件将被自动销毁可以看到,Flex 4默认的处理方式为:直到组件被需要时(切换到指定状态)才被创建,但一旦被创建后就不会被销毁。你可以根据自己的需要来改变创建和销毁的机制,例如:
<fx:Reparent>标签Reparent标签必须和includeIn或excludeFrom一起使用。它相当于一个占位符,当切换到包含该标签的状态时,Reparent标签的位置会被其指定的目标对象(target)所代替,从而达到对组件在特定状态下重新定位的效果。例如:
<s:states> <s:State name="state1" /> <s:State name="state2" /></s:states>?<s:Group> <s:Button id="button1" includeIn="state1" /> <s:Button id="button2"/> <fx:Reparent target="button1" includeIn="state2"/></s:Group>
在上面例子中,当状态切换到state2时,button1和button2的遮盖顺序会颠倒过来。你可以发挥你的想象力去挖掘这个标签的潜在用途。