<mx:ComboBox id="userRating" width="100%"> <!-- An inline data provider --> <mx:Array> <mx:Object data="0" label="Zero" /> <mx:Object data="1" label="One" /> </mx:Array> </mx:ComboBox>2),使用数据绑定: 使用[Bindable]元数据标签(属性非默认绑定,必须明确的声明被绑定的属性),将控件绑定到使用 ActionScript? 定义的现有 Array 或 Collection。
<mx:Script> <![CDATA[ [Bindable] private var subscriptions:ArrayCollection = new ArrayCollection ( [ {data:0, label:"Print"}, {data:1, label:"Website"}, ] ); ]]> </mx:Script> <mx:FormItem label="Subscriptions:" width="100%"> <mx:List id="userSubscriptions" rowCount="3" allowMultipleSelection="true" width="100%" dataProvider="{subscriptions}" />3, 使用REPEATER: 是非可视控件,类似于编程语言里的For循环,可在执行期复制其它组件。<mx:Repeater>的卷标要自己输入,而 dataProvider可在<mx:Script>区段之中,以[Bindable]的Metadata定义之数组作连结。 REPEATER还可嵌套使用。
<mx:Script> <![CDATA[ [Bindable] public var dp:Array=[1,2,3,4]; ]]> </mx:Script> <mx:ArrayCollection id="myAC" source="{dp}"/> <mx:Repeater id="r" dataProvider="{myAC}"> <mx:Button id="repbutton" label="button {r.currentItem}"/> </mx:Repeater>4, 加入数据验证:数据模型支持自动数据验证,这就意味着你可以很方便地使用Flex验证器。as3.0验证的类包为mx.Validators.包中有一个基类Validator,其他的类都为其子类:1),用标签实现验证:
//绑定验证对象:source:表示验证的对象,property:表示验证对象的属性 <mx:PhoneNumberValidator id="pnV" source="{phoneInput}" property="text"/> <mx:TextInput id="phoneInput"/>2),用AS编程实现验证
<mx:Script> <![CDATA[ import mx.validators.PhoneNumberValidator; // 创建验证器 private var v:PhoneNumberValidator = new PhoneNumberValidator(); private function createValidator():void { // 设置验证器 v.source = phoneInput; v.property = "text"; } ]]> </mx:Script> <mx:TextInput id="phoneInput" creationComplete="createValidator();"/>还可以加入按钮触发器,并修改默认提示错误
//trigger:表示触发验证事件的对象 //triggerEvent:表示对象触发验证事件的时机(如click,mouseOver等) //requiredFieldError属性 表示必填项没填入数据的时的提示错误信息 //wrongLengthError:表示输入的数据阿拉伯数字长度小于10时提示的错误信息 //invalidCharError:表示输入数据不是阿拉伯数字时提示的错误信息 <mx:PhoneNumberValidator id="pnV" source="{phoneInput}" property="text" trigger="{btn}" triggerEvent="click" requiredFieldError="此项为必填" invalidCharError="请输入阿拉伯数字" wrongLengthError="请至少输入请输入10个阿拉伯数字" /> <mx:TextInput id="phoneInput"/> <mx:Button label="Button" id="btn"/>3),高级用法: 使用正则表达式创建自定义验证器5, 加入资源(图片,音频,视频,程序):运行时外载和编译时直接内嵌两种方式,外载方式要多花一段载入时间,但使用简单;内嵌方式可直接调用资源,但加重了程序的负担(体积变大,且图片编辑后需要重新编译)1),Image(图画)控件: 可外载或内嵌多种富媒体资源: JPEG、GIF、PNG位图、SVG矢量图(只能内嵌) , SWF动画(非Flex的SWF应用程序。),SWF库按钮(Button),SWF库动画(MovieClip?),
//外载一个富媒体,可使用绝对或者相对路径。 但加入SWF文件时,可用use-network参数指定其使用网络或者本地文件二者之一。 <mx:Image id="myLogo0" source="assets/logo.png"/> //简单地内嵌一个富媒体.png,.jpg,.gif, .swf(可将嵌入的SWF文件的实例当作 MovieClip.MovieClipAsset 类的实例处理, 不能直接访问嵌入的SWF文件的属性或方法。 但可用 LocalConnection以允许SWF之间进行通信。), .SVG(可将嵌入的SVG文件的实例当作Sprite.SpriteAsset类的实例处理。) <mx:Image id="myLogo" source="@Embed('assets/logo.png')"/> //在脚本中定义富媒体对象,然后在MXML中可以多次嵌入 <mx:Script> <![CDATA[ [Embed(source="assets/logo.png")] [Bindable] public var Logo:Class; ]]> </mx:Script> <mx:Image id="myLogo" source="{Logo}"/> <mx:Image id="myLogo2" source="{Logo}"/> //在脚本中定义图片的scale-9像框缩放功能就可以保持边框的清晰, (旋转嵌入的scale-9 图像的实例会关闭该图像的scale-9功能。)。 <mx:Script> <![CDATA[ [Embed( source="assets/fancy_border.png", scaleGridTop="55", scaleGridBottom="137", scaleGridLeft="57", scaleGridRight="266" )] [Bindable] public var FancyBorderImage:Class; ]]> </mx:Script> <mx:Image source="{FancyBorderImage}" width="146" height="82"/> //嵌入 SWF 库资源 <mx:Script> <![CDATA[ [Embed(source="assets/library.swf", symbol="BadApple")] [Bindable] public var BadApple:Class; ]]> </mx:Script> <mx:Image id="badApple" source="{BadApple}" width="150" height="151.8"/>2) 设置翻转的图片:使用 CSS为外观外载/内嵌翻转的图像可以定义一个现有的CSS类型选择器为该类型的所有组件设置外观。还可以进一步创建自定义CSS 类。
<mx:Style> Button { upSkin: Embed("assets/box_closed.png"); overSkin: Embed("assets/box.png"); downSkin: Embed("assets/box_new.png"); } </mx:Style> <mx:Button/>3), SWFLoader控件: 通常用来加入Flex应用程序(可以使用AS与其通信),当然也能用于加入Image控件所能加入的富媒体资源。
//外载入SWF程序 <mx:SWFLoader id="loader1" source="FlexApp.swf"/> //内嵌入SWF程序 <mx:SWFLoader id="loader2" source="@Embed(source='flexapp.swf')"/> //还可以在FDS环境下加入MXML文件,要以buttonicon.mxml.swf形式加入,以提示FDS编译该文件。 <?xml version="1.0"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:SWFLoader source="buttonicon.mxml.swf" scaleContent="false"/> </mx:Application>4), 加入MP3音频: 您可以在 Flex 应用程序中通过使用[Embed]元数据标签嵌入MP3文件并播放它。注意音频文件的体积要优化。
<mx:Script> <![CDATA[ import mx.core.SoundAsset; import flash.media.*; [Embed(source="assets/pie-yan-knee.mp3")] [Bindable] //MP3 的一个新实例 public var Song:Class; //将该实例创建为一个 SoundAsset public var mySong:SoundAsset = new Song() as SoundAsset; public var channel:SoundChannel; //使用 SoundAsset 类的 play() 方法来播放 MP3 文件的实例 public function playSound():void { // 先消音,防止同时多次播放 stopSound(); // 播放该音频,并存储返回的SoundChannel对象结束播放。 channel = mySong.play(); } public function stopSound():void { // 当音频播放时,调用SoundChannel对象的 stop() 方法以停止播放 if ( channel != null ) channel.stop(); } ]]> </mx:Script> <mx:Button label="play" click="playSound();"/> <mx:Button label="stop" click="stopSound();"/>5), 加入字体: 您希望在 Flex 应用程序中嵌入一种字体并将它用作基于文本的组件的样式。下面的示例创建引用嵌入的字体的 font-family 名称的一个类选择器。 接着它会创建一个 Text 控件并将其样式设置为该类选择器。提示: 您在嵌入字体以节省文件大小时仅可以从字体添加某些字符, 方法是指定您的 @font-face 声明的 unicode-range 属性。
<mx:Style> @font-face { font-family: Copacetix; src: url("assets/copacetix.ttf"); unicode-range: U+0020-U+0040, /* Punctuation, Numbers */ U+0041-U+005A, /* Upper-Case A-Z */ U+005B-U+0060, /* Punctuation and Symbols */ U+0061-U+007A, /* Lower-Case a-z */ U+007B-U+007E; /* Punctuation and Symbols */ } .MyTextStyle { font-family: Copacetix; font-size: 24pt; } </mx:Style> <mx:Text styleName="MyTextStyle" text="Embedded fonts rock!" width="100%"/>
//在Model数据中使用{}语句来绑定数据 <mx:Model id="thing1"> <data> <part>{input1.text}</part> </data> </mx:Model> //用<mx:Binding>标签来绑定数据 <mx:Binding source="input2.text" destination="thing1.part"/> <mx:TextInput id="input1"/> <mx:TextInput id="input2"/> <mx:TextArea text="{thing1.part}"/>3, 使用AS类来绑定:使用mx.binding.utils.BindingUtils?的bindProperty()或者bindSetter() 方法
<mx:transitions> //fromState 属性指定当应用该过渡时您要更改的视图状态 //toState 属性指定您要更改为的视图状态 //effect 属性是对要播放的 Effect 对象的引用 <mx:Transition id="myTransition" fromState="*" toState="Advanced"> //<mx:Parallel> 和 <mx:Sequence> 标签分别引发并行或按顺序播放的效果 <mx:Parallel target="{myVBox}"> //效果标签 <mx:WipeDown duration="2000"/> <mx:Dissolve alphaFrom="0.0" alphaTo="1.0" duration="2000"/> </mx:Parallel> </mx:Transition> </mx:transitions>4, 为用户提供工具提示Adobe Flex ToolTip? 使您能够为您的用户提供有帮助的信息。当用户在图形组件上移动鼠标指针时, 会弹出包含文本信息的工具提示。您可以使用工具提示来指导用户完成使用应用程序或自定义它们来提供其他功能。扩展 UIComponent 类 (该类实现 IToolTipManagerClient? 界面) 的每个可视 Flex 组件都支持 toolTip 属性。您将 toolTip 属性的值设置为一个文本字符串, 并且, 当鼠标指针悬停在该组件上时, 会显示该文本字符串。尽管长消息很难读取, 但对工具提示文本的大小不存在任何限制。当工具提示文本达到工具提示框的宽度时, 文本会自动换至下一行。可以在工具提示文本中添加换行符。在 ActionScript? 中, 您使用 \n 转义的新行字符。在 MXML 标签中, 您使用 XML 实体。可以通过使用层叠样式表 (CSS) 语法或 mx.styles.StyleManager? 类更改工具提示文本和工具提示框的外观。对工具提示样式的更改适用于当前应用程序中的所有工具提示。5, 控制光标使用Flex光标管理器可以控制 Flex 应用程序中的光标图像。 例如, 如果应用程序执行的处理需要用户等待, 直到处理完成为止, 则可以将光标更改为某个自定义的光标图像, 比如沙漏, 以使它反映该等待期。您还可以更改光标以向用户提供反馈, 指示用户可以执行的操作。 例如, 您可以使用一个光标图像来指示用户输入被启用, 而使用另一个光标图像来指示输入被禁用。CursorManager? 类控制一个光标优先顺序列表, 在其中具有最高优先级的光标当前是可见的。 如果光标列表包含具有相同优先级的多个光标, 则光标管理器会显示最近创建的光标。1), 使用默认的忙光标Flex 定义了一个默认的忙光标, 可用来指示应用程序正在处理, 且在应用程序对用户输入作出响应之前, 用户应等待, 直到处理完成。 默认的忙光标是一个动画时钟。可以使用以下几种方式来控制忙光标:
//参数event_type是Event对象的type属性 //函数的返回值总是True. objectInstance.dispatchEvent(new Event("event_type"):Boolean可以使用此方法派发任意事件, 而不仅仅是用户自定义事件, 比如: 可以派发一个Button的Click事件. var result:Boolean = buttonInstance.dispatchEvent(new Event(MouseEvent?.CLICK));在Flex应用中不是必须对新派发的事件进行处理, 如果触发了一个事件, 而没有对应的Listener时,Flex忽略此事件.如果想给Event对象添加新属性, 就必须继承Event类,然后定义新属性3), 事件的传播事件触发后, Flex有3个检测事件监听器的阶段, 3个阶段的发生的顺序如下:A. 捕获阶段:在捕获阶段,Flex在显示列表中检查事件的祖先是否注册了事件的监听器. Flex从根节点开始顺序而下. 大多数情况中, 根节点是Application对象. 同时, Flex改变事件的currentTarget值. 缺省情况下, 在此阶段,没有容器监听事件. use_capture参数的值是False,在此阶段添加监听的唯一方法是在调用add_listener时,传入一个为True值的use_capture参数, 比如:
myAccordion.addEventListener(MouseEvent.MOUSE_DOWN, customLogEvent, true);如果是在Mxml中添加监听, Flex设置此参数为False, 没有办法进行修改. 如果设置了use_capture为True, 那么事件将不会上浮. 如果既想捕获又想上浮就必须调用 addEventListener?两次. 一次use_capture参数为true, 一次为false; 捕获很少使用, 上浮的使用更为普遍.B. 目标阶段: 在目标阶段, Flex激发事件的监听程序, 不检查其他的节点.C. 上浮阶段:事件只在bubbles属性为True时才进行上浮. 可以上浮的事件包括: change, click, doubleClick, keyDown, keyUp, mouseDown, mouseUp. 在上浮阶段, Flex改变事件的currentTarget属性, 而target属性是初始派发事件的对象.在任意一个阶段, 节点们都有机会操作事件. 比如: 用户点击了一个在VBox中的Button,在捕获阶段, Flex检查Application对象(根节点)和VBox是否有监听器处理此事件. Flex然后在目标阶段触发按钮的监听器.在上浮阶段, VBox和应用以与捕获阶段相反的顺序再次获得机会处理事件.在Actionscript3.0中,你可以在任意目标节点上注册事件监听器. 但是部分事件会被直接传给目标节点,比如Socket类. 捕获阶段的节点顺序是从父节点到子节点的, 而上浮阶段刚好相反.捕获事件缺省是关闭的,也就是说如果要捕获事件, 必须显式指定在捕获阶段进行处理.每一个Event都有target和currentTarget属性, 帮助跟踪事件传播的过程.4), 查询事件阶段使用事件的eventPhase可以获得事件当前的阶段,1): CAPTURE_PHASE2): AT_TARGET3): BUBBLING_PHASE示例: private function determineState(event:MouseEvent?):Void { Debug.trace(event.eventPhase + ":" + event.currentTarget.id); }5), 停止传播使用下面两个函数停止事件的传播:stopPropagation()stopImmediatePropagation?()2, 创建监听器组件有Flex提供的内建事件. 也可以使用派发-监听模型定义自己的事件监听器, 并指定监听器监听何种事件.有三种方式:1), 内部MXML中的AS函数法: 在MXML的<mx:Script></mx:Script>声明中注册监听器: 这是第一个和使用最广泛的方法,在 MXML 中定义事件发生时会调用的事件处理程序。2), 外部AS文件中的AS函数法:通过ActionScript?定义注册事件处理程序: 可以通过使用ActionScript? 中的 addEventHandler?() 等方法来注册事件处理程序。 可将 addEventHandler?() 方法置于 Application 容器的 creationComplete 事件(在 Application 表单及其子级被初始化之后, 在启动应用程序时发生)的事件处理程序中。 详见Action Script教程。3), 代码混写法: 在MXML的控件标签中直接完全嵌入监听器(这也称为使用线上事件处理程序): 这样比较直接,代码也较少,但会导致代码很难阅读、维护和缩放。如果监听器是多个AS语句甚至更复杂的逻辑,不推荐此方法。
Button.as MyASButton.as package { public class MyASButton extends Button { //Override inherited methods and properties. //Define new methods and properties. //Define custom logic in ActionScript. } } <mx:Button> <ms:Script> //Override inherited methods and properties. //Define new methods and properties. //Define custom logic in ActionScript. </mx:Script> <!-- Add MXML code. --> </mx:Button>上面的两种实现方法都生成了一个Button类的子类。同样的继承了所有的属性,方法和button类的所有元素。都可以重写类的属性,方法和逻辑。注意:父类中的变量是不能被覆盖,但是可以覆盖通过setter和getter方法实现的属性。你可以重新设置这些变量的值。另外,如果使用mxml创建组建,flex编译器完成了创建一个组件的子类的大部分工作,因此使用mxml创建组件比用as创建组件更加容易。2, 决定是使用mxml还是as创建组件在创建组件之前需要做的一个首要决定是,使用as还是mxml。由你需要开发应用程序来决定你需要使用什么样的组件。下面是一些基本的指导方针:mxml和as组件都定义了新的as类。基本上所有能用as完成的自定义组件都可以通过mxml来实现。一般来说,对于简单的自定义组建,例如修改已有组建的一些属性和方法,使用mxml要比使用as方便得多。当你在新的组件中使用了别的组建,而且需要使用flex layout容器来进行多个组件的布局设置,那么需要使用mxml来定义。如果你想修改某一个组件的行为,例如一个容器中子元素的布局方式,则使用as。如果你想通过创建UIComponent的子类来创建一个全新的可视化组件,则使用as。如果你想创建一个全新的非可视化组件,例如formatter,validator,或者effect,则使用as。注意:Flash Professional 8是不能开发AS3.0的组件的,如果要使用AS3.0开发Flex2组件,应该使用Flex Builder IDE。3, 组件部署在部署你的mxml或as文件的自定义组件时,一般将这些文件放置在你的应用程序的子目录内,或者一个定义好的as类路径下。为了保密,你可能不希望使用源码的形式来部署你的源文件。因此你可以使用swc文件或者共享资源库(RSL)作为用来部署的文件。Swc文件是Flex组件的一种集合格式。使用swc文件可以方便的在开发人员之间进行交流,这样你使用使用一个文件,而不是很多mxml,as文件,或者图片和其他资源。更重要的是,swc文件中的swf已经被编译了,这意味着你不用看着繁杂的代码。Swc文件可以包含多个组件,使用PKZip打包格式将其打包在一起。你可以使用winzip,jar或者任何打包工具来打开这个文件。但是,一般来说不要直接在swc外部运行打包在swc里面的swf文件。创建swc文件,需要使用compc工具,该工具在flex安装目录下的bin目录内。compc工具可以将mxml文件,或as文件,或两种文件一起,打包成swc文件。
要缩小你的swf格式的应用程序的大小,有一种方式是将共享资源打包到文件外部,由client下载并保存在缓存中。这些外部职员可以在程序运行的时候多次被使用,但是只需要从服务器传输到client端一次。这些文件就是共享资源库(RSL)。http://blog.csdn.net/dengyigang/archive/2008/09/22/2956870.aspx