Flex4相对于Flex3的变化

news/2024/11/8 4:34:43/

  flex4 beta发布了,它是自flex3以来的重大改革。flex4 beta 提供了一种新的组件和皮肤的架构。作为一个flex3的开发者,当你用flex4 beta编译你的flex3应用时你应该不会遇到太大的挑战,因为flex4 beta的一个目标就是保持与flex3的兼容。

      在这篇文章里我会提供关于flex4 beta主体带的一个大概的浏览,介绍一下Flex3到Flex4架构上的区别,以及在组件,布局,状态,效果上的改变。这篇文章里,halo代表flex3里的原始组件。spark代表flex4 beta里的新的组件。

 

将应用迁移到flex4 beta

      把应用从flex3迁移到flex4,不会遇到太大的麻烦。除了看到一些bug被修补了以及默认的主题换了,你还会看到你的应用会在flex4里工作的更好。但是还是有些东西你需要注意。

      ◆播放器的依赖

      flex4 beta 需要flash player10的支持。

      ◆样式选择器需要命名空间

      对于一个css样式选择器以前你可能只需要这样写

     

Button {  
cornerRadius: 10;  
}  
DateField {  
color: #780800; 
} 

 

     但是在flex4 beta里你必须加上命名空间。

    

< mx:Style>
@namespace "http://www.adobe.com/2006/mxml";  
…  
< /mx:Style> 

 

 

    更进一步,如果你用了StyleManager.getStyleDeclaration("Button"),在flex4里你必须把命名空间给加上  如:StyleManager.getStyleDeclaration("mx.controls.Button")。

   

    ◆Flex3到Flex4主题的变化

     主题已经由默认的halo变成了spark。所以你的应用在flex4里看起来可能会不一样了。当然了,你要是想用halo也是有办法的。你可以用-compatibility-version=3.0这个标识也可以修改additional compiler argument(附加的编译器自变量)为_local en US -theme=halo.swc。

      如果你选择用Spark,你会发现很多在Halo里工作的样式到Spark里就不工作了,spark主题只支持有限的样式。想要修改如border之类的外观你需要自定义的皮肤。flex4也提供了一个Wireframe皮肤来帮助你快速建立模型。

      除了默认样式的变化,预加载进度条也变化了。这个更轻量级的进度条会缩短启动的时间。你要想还是用原来的加载进度条你只需加上下面这一条:preloader="mx.preloaders.DownloadProgressBar"。

   

Flex3到flex4 beta架构改变一览

      flex4 给设计师和开发者提供一个更平滑的工作流。为了实现这个,flex4框架提供了可视化组件和其行为的明确的分界。 在flex3里一个组件代码包括逻辑,布局和可视化的变化,但是在flex4里一个组件被分配到了不同的类,每个类都掌控不同的方面。

      ◆flex4里的包和命名空间

      flex4里保存了flex3的全部类,它们全在mx.*的包里。当然除此之外,flex还提供全新的spark.*包来保存组件,核心类,效果,滤镜,布局, 皮肤和工具。

      flex提供了一套组件,其中很多与halo有同样的名字,为了避免名字的冲突,随flex4而来的是4个不同的命名空间:MXML 2006, MXML 2009, Spark, and Halo。

      MXML 2006:过时的mxml语言命名空间,曾用在flex3。如果用flex4编译flex3的应用程序,你依然可以用这个命名空间。

      URI: http://www.adobe.com/2006/mxml

      默认前缀:mx

      MXML 2009: 全新的mxml语言命名空间,是纯的语言命名空间,不包含组件。

      URI: http://ns.adobe.com/mxml/2009

      默认前缀:fx

      SPARK:这个命名空间里包含了所有的新的Spark组件,他应该和MXML 2009一起使用。

      URI: library://ns.adobe.com/flex/spark

      默认前缀: s

      HALO:这个命名空间包含所有halo的组件,应该与MXML2009一起使用。

      URI: library://ns.adobe.com/flex/halo

      默认前缀:mx

      flex4在css方面也提供了多样的命名空间的支持。所以,在使用css时必须注意命名空间已避免冲突。

 
  1.  < fx:Style> 
  2. @namespace s "library://ns.adobe.com/flex/spark";  
  3. @namespace mx "library://ns.adobe.com/flex/halo";  
  4. s|Button {  
  5. color: #FF0000;  
  6. }  
  7. mx|DateChooser {  
  8. color: #FF0000;  
  9. }  
  10. < /fx:Style> 

新的组件和容器

◆组件

flex4修改和新增了一些组件,也有些组件是halo有的,但是spark没有。adobe建议你halo和spark一起用。至于两者都有什么,没什么下面有个网址你可以去看看。

http://www.adobe.com/devnet/flex/articles/flex3and4_differences_04.html

◆state语法的改变

state语法变了,变得更加的有弹性和直接。你甚至可以根据上下文来针对性的改变你的状态。下面是重点:

1,只有状态被定义到了状态数组。

2,AddChild和RemoveChild,不能再用了。取而代之的是includeIn和excludeFrme属性 。这两个属性是组件的属性。

看例子吧!

这是flex3应用状态的方式。

 
  1.  < mx:states>< mx:State name="submitState" basedOn=""> 
  2. < mx:AddChild relativeTo="{loginForm}" > 
  3. < mx:Button label="submit" bottom="10" right="10"/> 
  4. < /mx:AddChild> 
  5. < mx:RemoveChild target="{firstTextInput}"/> 
  6. < /mx:State> 
  7. < /mx:states> 
  8. < mx:TextInput id="firstTextInput" /> 
  9. < mx:Canvas id="loginForm" /> 

这是flex4

 
  1.  < s:states> 
  2. < s:State name="submitState" /> 
  3. < /s:states> 
  4. < s:TextInput id="firstTextInput" excludeFrom="submitState" /> 
  5. < s:Group id="loginForm" > 
  6. < s:Button label="submit" bottom="10" right="10" includeIn="submitState"/> < /s:Group> 

3,setProperty,setStyle和setEvent被点语法取代了。

下面是flex3的做法

 
  1.  < mx:states> 
  2. < mx:State name="submitState" basedOn=""> 
  3. < mx:SetProperty target="{submitButton}" name="label" value="submit" /> 
  4. < mx:SetStyle target="{submitButton}" name="textDecoration" value="underline"/> 
  5. < mx:SetEventHandler target="{submitButton}" name="click" handler="trace('done');"/> 
  6. < /mx:State> 
  7. < mx:State name="clearState" basedOn=""> 
  8. < mx:SetProperty target="{submitButton}" name="label" value="clear" /> 
  9. < mx:SetEventHandler target="{submitButton}" name="click" handler="emptyDocument()" /> 
  10. < /mx:State> 
  11. < /mx:states> 
  12. < mx:Button id="submitButton" /> 

下面是flex4的做法

 
  1.  < s:states> 
  2. < s:State name="submitState" /> 
  3. < s:State name="clearState" /> 
  4. < /s:states> 
  5. < s:Button label.submitState="submit" textDecoration.submitState="underline" 
  6. click.submitState="trace('done')" click.clearState="emptyDocument()" label.clearState="clear" textDecoration.clearState="none"/> 

4,组件不能在无状态或空的状态。它默认的状态时第一个声明的状态。

flex4 beta还有其他的特性,以后的文章继续在讨论。

adobe官方说从flex3到flex4得转变painless。你认为呢?

 

Flex4相对FLex3的组件变化

customizations much more straightforward. Here is a table showing Flex 3 Halo components and their Flex 4 beta Spark counterparts:

Flex 3 Halo ComponentFlex 4 beta Spark Component
mx.controls.Buttonspark.components.Button
mx.controls.ButtonBarspark.components.ButtonBar
mx.controls.CheckBoxspark.components.CheckBox
mx.controls.ComboBoxspark.components.DropDownList (w/o editability)
mx.controls.HorizontalListspark.components.List (with a HorizontalLayout)
mx.controls.HRulespark.primitives.Line
mx.controls.HScrollBarspark.components.HScrollBar
mx.controls.HSliderspark.components.HSlider
mx.controls.Imagespark.primitives.BitmapImage
mx.controls.LinkBarspark.components.ButtonBar (with a custom skin)
mx.controls.LinkButtonspark.components.Button (with a custom skin)
mx.controls.Listspark.components.List
mx.controls.NumericStepperspark.components.NumericStepper
mx.controls.RadioButtonspark.components.RadioButton
mx.controls.RadioButtonGroupspark.components.RadioButtonGroup
mx.controls.TextAreaspark.components.TextArea
mx.controls.TextInputspark.components.TextInput
mx.controls.TileListspark.components.List (with a TileLayout)
mx.controls.ToggleButtonBarspark.components.ButtonBar
mx.controls.VideoDisplayspark.components.VideoPlayer
mx.controls.VRulespark.primitives.Line
mx.controls.VScrollBarspark.components.VScrollBar
mx.controls.VSlider

spark.components.VSlider

mx.core.Applicationspark.components.Application
mx.core.Windowspark.components.Window
mx.core.WindowedApplicationspark.components.WindowedApplication
mx.containers.Canvas spark.components.Group
mx.containers.HBoxspark.components.HGroup
mx.containers.Panelspark.components.Panel
mx.containers.Tilespark.components.Group (with a TileLayout)
mx.containers.VBoxspark.components.VGroup

Adobe encourages you to use Halo components and containers along with Spark components. Because Adobe continues to build components atop the same base class (UIComponent), there should be full interoperability between Spark and Halo. Here is a table of the components and containers that do not currently have direct Spark equivalent classes.

Flex 3 classes with no direct Flex 4 beta counterpart
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.TabBar
mx.controls.Tree
mx.containers.Accordion
mx.containers.ApplicationControlBar
mx.containers.ControlBar
mx.containers.DividedBox
mx.containers.Form
mx.containers.Grid
mx.containers.TabNavigator
mx.containers.TitleWindow
mx.containers.ViewStack

Changes in states syntax

Flex 4 beta has promoted the states functionality to a full MXML language feature. As a result, you will likely find states to be much more flexible and direct. The new states syntax is more inline, allowing state-specific changes to be specified in context. Here are the key differences in the Flex 4 beta syntax:

  • Only states are defined within the states array.
  • In the new states syntax, you cannot use de>AddChildde> and de>RemoveChildde>. Instead, you define a component's role in a particular state on the component itself using the de>includeInde> and de>excludeFromde> attributes.

In the following Flex 3 example, states are used to include a Button and remove a TextInput only when the de>currentStatede> of the document is de>submitStatede>. This approach can get very verbose with more complex states.

<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" />

Here is the simpler Flex 4 beta code using de>includeInde> and de>excludeFromde>.

<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>
  • de>SetPropertyde>, de>SetStylede>, and de>SetEventHandlerde> have been replaced by a new dot syntax, which allows you to qualify MXML attribute values with a specific state identifier.

In the following Flex 3 example, the code defines a property, style, and event for a Button in de>submitStatede>.

<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" />
de><mx:SetEventHandler target="{submitButton}" name="click" de>handler="emptyDocument()" />
</mx:State>
</mx:states>
<mx:Button id="submitButton" />

In Flex 4 beta, the code looks like this:

<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"/>
  • A component can no longer be in an undefined or null state. By default, the first declared state is the initial state of a component.
    The new syntax is available when a document uses the MXML 2009 language namespace. You cannot mix the legacy syntax and the new states syntax. The old syntax is available only in the MXML 2006 namespace.

Additionally, each component now supports a set of states defined in its skin class, which makes it simpler to apply visual changes depending on the state of a component. For example, if you look at the skin for the Spark Button, you will find the following states defined:

<s:states>
<s:State name="up" />
<s:State name="over" />
<s:State name="down" />
<s:State name="disabled" />
</s:states>

The ButtonSkin class defines what happens visually to a Spark Button in each one of these states.

This is only a brief introduction to the new Flex 4 beta states syntax. Visit the Enhanced States Syntax Spec to find more details.


http://www.ppmy.cn/news/560015.html

相关文章

Flex3学习笔记4

Flex3学习笔记4 Flex脚本基础 一、ActionScript和MXML的关系 Flex由两种语言组成&#xff0c;ActionScript和MXML。MXML负责应用的布局结构&#xff0c;ActionScript负责建立交互。那么&#xff0c;ActionScript和MXML有什么异同呢&#xff1f; 1&#xff09;MXML ActionScri…

Flex概览

Flex技术是RIA的一种技术。 Flex技术包括&#xff1a; Flex开发的核心是组件和事件&#xff0c;更核心点其实Flex无非也是基于组件的事件驱动。它同vb大同小异&#xff0c;没有什么区别。它的语言是MXML和ActionScript&#xff0c; MXML是用于为Adobe Flex应用程序进行用户界面…

机器视觉初步8:特征提取专题

文章目录 1.角点检测2.纹理特征提取3.特征描述符匹配3.1 Harris角点描述符3.2 SIFT&#xff08;尺度不变特征变换&#xff09;描述符3.3 SURF&#xff08;加速稳健特征&#xff09;描述符 4.基于深度学习的特征提取 在机器视觉中&#xff0c;特征提取是从目标图像中提取有用的视…

嵌入式软件常用工具概览

简介 “工欲善其事&#xff0c;必先利其器”&#xff0c;选择高质量并适合自己工具可以提高效率&#xff0c;这里介绍一下一些嵌入式软件开发过程中常用工具。 源码工程类 VSCode &#xff1a;Visual Studio Code 出自微软的代码编辑器&#xff0c;需要的功能可以通过安装插…

我用Python抓取了【S11全球总决赛】直播评论,EDG nb

大家好&#xff0c;我是五包辣条。 《爬虫100例实战案例》又来了&#xff0c;昨天兄弟萌看直播了吗&#xff0c;一句话EDG牛掰就完事了。 四强的时候 T1&#xff1a;我是三冠王 GENG&#xff1a;我是双冠王 DK&#xff1a;我是去年世界冠军 EDG&#xff1a;本来想以第一次进四…

S参数与插入损耗和回波损耗

1、S参数的定义 2、回波损耗S11 相位和实部虚部的对应关系&#xff0c;0相移虚部为零&#xff0c;90相移&#xff0c;实部为零&#xff0c;180相移实部为负&#xff0c;虚部 为零。 3、插入损耗S21

Problem B. S11-06

参考习题11.5,按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中,m和n的值由用户键盘输入。已知m和n的值都不超过10。 void InputArray(int p, int m, int n) ; int FindMax(int p, int m, int n, int pRow, int pCo1) …

S11.shell脚本每日一练

21.打印等腰三角形 [rootrocky8 bin]# vim for_triangle.sh #!/bin/bash # #********************************************************************************************** #Author: Raymond #QQ: 88563128 #Date: 2021-10-10 #FileName: …