在学习Flex4beta的过程中你可能会遇到Flex4beta状态语法中的变化方面的问题,这里和大家分享一下,相信本文介绍一定会让你有所收获。
Flex4beta状态语法中的变化
Flex4beta将状态功能升级为一个全面的MXML语言功能。因此,您可能会发现状态更灵活、更直接。新的状态语法内联程度更高,允许在上下文中指定状态特定变化。以下是Flex4beta语法中的主要区别:
◆只有状态是在状态阵列中定义的。
◆在新的状态语法中,不能使用AddChild和RemoveChild。您必须使用includeIn和excludeFrom属性在组件上定义组件在特定状态中的角色。
在以下Flex3示例中,仅当文档的currentState为submitState时,才使用状态包含一个Button并删除一个TextInput。对于较复杂的状态,这种方法可以做到十分详细。
- <mx:states>
- <mx:Statenamemx:Statename="submitState"basedOn="">
- <mx:AddChildrelativeTomx:AddChildrelativeTo="{loginForm}">
- <mx:Buttonlabelmx:Buttonlabel="submit"bottom="10"right="10"/>
- </mx:AddChild><mx:RemoveChildtargetmx:RemoveChildtarget="{firstTextInput}"/>
- </mx:State></mx:states
- <mx:TextInputidmx:TextInputid="firstTextInput"/>
- <mx:Canvasidmx:Canvasid="loginForm"/>
以下是一段使用includeIn和excludeFrom、更简单的Flex4beta代码。
- <s:states>
- <s:Statenames:Statename="submitState"/>
- </s:states><s:TextInputids:TextInputid="firstTextInput"excludeFrom="submitState"/>
- <s:Groupids:Groupid="loginForm">
- <s:Buttonlabels:Buttonlabel="submit"bottom="10"right="10"includeIn="submitState"/>
- </s:Group>
◆SetProperty、SetStyle和SetEventHandler已替换为新的点语法,它允许您限定具备特定状态标识符的MXML属性值。
在以下Flex3示例中,代码为submitState中的一个Button定义了属性、样式和事件。
- <mx:states><mx:Statenamemx:Statename="submitState"basedOn="">
- <mx:SetPropertytargetmx:SetPropertytarget="{submitButton}"name="label"value="submit"/>
- <mx:SetStyletargetmx:SetStyletarget="{submitButton}"name="textDecoration"value="underline"/>
- <mx:SetEventHandlertargetmx:SetEventHandlertarget="{submitButton}"name="click"
- handler="trace('done');"/>
- </mx:State><mx:Statenamemx:Statename="clearState"basedOn="">
- <mx:SetPropertytargetmx:SetPropertytarget="{submitButton}"name="label"
- value="clear"/>
- <mx:SetEventHandlertargetmx:SetEventHandlertarget="{submitButton}"name="click"
- handler="emptyDocument()"/>
- </mx:State></mx:states>
- <mx:Buttonidmx:Buttonid="submitButton"/>
在Flex4beta中,代码如下:
- <s:states>
- <s:Statenames:Statename="submitState"/>
- <s:Statenames:Statename="clearState"/>
- </s:states><s:Buttonlabel.submitStates:Buttonlabel.submitState="submit"
- textDecoration.submitState="underline"click.submitState="trace('done')
- "click.clearState="emptyDocument()
- "label.clearState="clear"textDecoration.clearState="none"/>
◆组件不能再处于未定义状态或空状态。默认情况下,声明的***个状态是组件的初始状态。
当文档使用MXML2009语言名称空间时,可以使用新语法。可以混合使用旧版语法和新版状态语法。只有MXML2006名称空间中可以使用旧版语法。
此外,各个组件现在支持外观类中定义的一组状态,这使得根据组件状态应用可视变化更加简单。例如,如果查看SparkButton的外观,您会发现已定义以下状态:
- <s:states>
- <s:Statenames:Statename="up"/>
- <s:Statenames:Statename="over"/>
- <s:Statenames:Statename="down"/>
- <s:Statenames:Statename="disabled"/>
- </s:states>
ButtonSkin类定义了各个状态中SparkButton在可视方面的变化。
以上只是简要介绍了新的Flex4beta状态语法。有关更多详细信息,请参阅增强的状态语法规范*。
【编辑推荐】
- Flex4beta的Spark布局特性解析
- 技术前沿 剖析Flex4beta效果中的变化
- Flex module用法指南
- Flex4Beta引入新元素功能更强大
- FlexBuilder开发方法及特点解析