如前所述,Flex 4 SDK 引入了许多使用新架构的新组件类,它们应当可以令外观和其他自定义操作更简单。下表列出了 Flex 3 MX 组件及其 Flex 4 Spark 对应组件:
Flex 3 MX 组件 | Flex 4 beta Spark 组件 |
---|---|
mx.controls.Button | spark.components.Button |
mx.controls.ButtonBar | spark.components.ButtonBar |
mx.controls.CheckBox | spark.components.CheckBox |
mx.controls.ComboBox | spark.components.DropDownList(不可编辑) |
mx.controls.HorizontalList | spark.components.List(带一个 HorizontalLayout) |
mx.controls.HRule | spark.primitives.Line |
mx.controls.HScrollBar | spark.components.HScrollBar |
mx.controls.HSlider | spark.components.HSlider |
mx.controls.Image | spark.primitives.BitmapImage(不支持外部图像) |
mx.controls.LinkBar | spark.components.ButtonBar(带一个自定义外观) |
mx.controls.LinkButton | spark.components.Button(带一个自定义外观) |
mx.controls.List | spark.components.List |
mx.controls.NumericStepper | spark.components.NumericStepper |
mx.controls.RadioButton | spark.components.RadioButton |
mx.controls.RadioButtonGroup | spark.components.RadioButtonGroup |
mx.controls.TextArea | spark.components.TextArea |
mx.controls.TabBar | spark.components.TabBar |
mx.controls.TextInput | spark.components.TextInput |
mx.controls.TileList | spark.components.List(带一个 TileLayout) |
mx.controls.ToggleButtonBar | spark.components.ButtonBar |
mx.controls.VideoDisplay | spark.components.VideoPlayer |
mx.controls.VRule | spark.primitives.Line |
mx.controls.VScrollBar | spark.components.VScrollBar |
mx.controls.VSlider | spark.components.VSlider |
mx.core.Application | spark.components.Application |
mx.core.Window | spark.components.Window |
mx.core.WindowedApplication | spark.components.WindowedApplication |
mx.containers.ApplicationControlBar | spark.components.Application(带 controlBarContent) |
mx.containers.Canvas | spark.components.Group |
mx.containers.ControlBar | spark.components.Panel(带 controlBarContent 属性) |
mx.containers.HBox | spark.components.HGroup |
mx.containers.Panel | spark.components.Panel |
mx.containers.Tile | spark.components.Group(带一个 TileLayout) |
mx.containers.VBox | spark.components.VGroup |
Adobe 鼓励您与 Spark 组件一起使用 MX 组件和容器。由于 Adobe 在同一基类 (UIComponent) 上构建组件,Spark 与 MX 之间应当可以实现全面的可互操作性。下表列出了目前没有 Spark 直接等效类的组件和容器。
Flex 3 类,没有直接的 Flex 4 beta 对应类 |
---|
mx.controls.Alert |
mx.controls.ColorPicker |
mx.controls.DataGrid |
mx.controls.DateChooser |
mx.controls.DateField |
mx.controls.Menu |
mx.controls.MenuBar |
mx.controls.PopUpButton |
mx.controls.PopUpMenuButton |
mx.controls.ProgressBar |
mx.controls.RichTextEditor |
mx.controls.Tree |
mx.containers.Accordion |
mx.containers.DividedBox |
mx.containers.Form |
mx.containers.Grid |
mx.containers.TabNavigator |
mx.containers.TitleWindow |
mx.containers.ViewStack |
要将 MX 导航器(ViewStack、Accordion、TabNavigator)用于 Spark 组件,导航器的子代应当是一个 NavigatorContent 组件。否则,您无法在 MX 导航器中使用 Spark 基元。此处是一个示例:
<mx:ViewStack id="vs" selectedIndex="{tb.selectedIndex}">
<s:NavigatorContent label="bar">
<s:layout>
<s:VerticalLayout />
</s:layout>
<s:Label text="bar" />
<s:TextInput />
</s:NavigatorContent>
</mx:ViewStack>
Flex 4 将状态功能升级为一个全面的 MXML 语言功能。因此,您可能会发现状态更灵活、更直接。新的状态语法内联程度更高,允许在上下文中指定状态特定变化。以下是 Flex 4 语法中的主要区别:
AddChild
和 RemoveChild
。您必须使用 includeIn
和 excludeFrom
属性在组件上定义组件在特定状态中的角色。在以下 Flex 3 示例中,仅当文档的 currentState
为 submitState
时,才使用状态包含一个 Button 并删除一个 TextInput。对于较复杂的状态,这种方法可以做到十分详细。
<mx:states>
<mx:State name="submitState" basedOn="">
<mx:AddChild relativeTo="{loginForm}" >
<mx:Button label="submit" bottom="10" right="10"/>
</mx:AddChild>
<mx:RemoveChild target="{firstTextInput}"/>
</mx:State>
</mx:states>
<mx:TextInput id="firstTextInput" />
<mx:Canvas id="loginForm" />
以下是一段使用 includeIn
和 excludeFrom
、更简单的 Flex 4 代码。
<s:states>
<s:State name="submitState" />
</s:states>
<s:TextInput id="firstTextInput" excludeFrom="submitState" />
<s:Group id="loginForm" >
<s:Button label="submit" bottom="10" right="10" includeIn="submitState"/>
</s:Group>
SetProperty
、SetStyle
和 SetEventHandler
已替换为新的点语法,它允许您限定具备特定状态标识符的 MXML 属性值。在以下 Flex 3 示例中,代码为 submitState
中的一个 Button 定义了属性、样式和事件。
<mx:states>
<mx:State name="submitState" basedOn="">
<mx:SetProperty target="{submitButton}" name="label" value="submit" />
<mx:SetStyle target="{submitButton}" name="textDecoration" value="underline"/>
<mx:SetEventHandler target="{submitButton}" name="click" handler="trace(’done’);"/>
</mx:State>
<mx:State name="clearState" basedOn="">
<mx:SetProperty target="{submitButton}" name="label" value="clear" />
<mx:SetEventHandler target="{submitButton}" name="click"
handler="emptyDocument()" />
</mx:State>
</mx:states>
<mx:Button id="submitButton" />
在 Flex 4 中,代码如下:
<s:states>
<s:State name="submitState" />
<s:State name="clearState" />
</s:states>
<s:Button label.submitState="submit" textDecoration.submitState="underline"
click.submitState="trace(’done’)" click.clearState="emptyDocument()"
label.clearState="clear" textDecoration.clearState="none"/>
此外,各个组件现在支持外观类中定义的一组状态,这使得根据组件状态应用可视变化更加简单。例如,如果查看 Spark Button 的外观,您会发现已定义以下状态:
<s:states>
<s:State name="up" />
<s:State name="over" />
<s:State name="down" />
<s:State name="disabled" />
</s:states>
ButtonSkin 类定义了各个状态中 Spark Button 在可视方面的变化。
以上只是简要介绍了新的 Flex 4 beta 状态语法。有关更多详细信息,请参阅增强的状态文档*。