因为是专门针对ActionScript来写的篇章,所以,对于ActionScript大家有功夫最好去看看基础入门知识,其实很容易上手很多部分都与JAVA面向对象及以前的基础知识相似
首先来说下ActionScript常用的三种方式
Flex的核心是MXML和ActionScript 。
MXML 是用于为 Flex应用程序进行用户界面组件布局, 它属于表示层,最终要编辑成ActionScript 并生成ActionScript 类文件在Flash Player上运行。如果你是个Java开发者就很好理解这一点,MXML 就好比是JSP/Struts/JSF,它们最终都会编辑成Java 类文件并在具备JAVA虚拟机环境的浏览器上运行。
所以说,Flex 最核心的还是ActionScript 。在Flex中,ActionScript是 类库的方式出现的,该类库包含组件 (容器和控件)、管理器类、数据服务类和所有其他功能的类
1. 内联方式
<mx:Button label="Say Hello" click="mx.controls.Alert.show('Hello,Flying')"/>
2. 级联方式
<mx:Button label="Say Hello" click="sayHello('Flying')"/> <mx:Script> <![CDATA[ import mx.controls.Alert; private function sayHello(param_name:String):void { Alert.show("Hello, "+param_name); } ]]> </mx:Script>
3. 外联方式
<mx:Script source="myFunction.as"/>
<mx:Button label="Say Hello" click="sayHello('Flying');"/>
// myFunction.asimport mx.controls.Alert; private function sayHello(param_name:String):void { mx.controls.Alert.show("Hello, "+param_name); }
上述方式为AS方法单独新建一个as文件,然后设置该方法为被调用文件的Script元素的source属性值,并可以在调用方法时传递参数,此文件可以在多个文件调用,从而实现了AS方法在多个文件中的重用。
其次呢就要说说今天重点的ActionScript构建组件了
可以使用ActionScript创建可重用的组件,并且在你的Flex程序中可以作为标签引用这个组件。在ActionScript中创建的组件能够包含图像元素,自定义业务逻辑,或者扩展已经存在的Flex组件。
在ActionScript中,Flex组件实现了类层次结构。每一个组件,都是Action类的实例。下图展示了这种层次结构的一部分。
所有Flex可视组件都是源自于UIComponent类。要创建自己的组件,你可以创建一个继承UIComponent的类,或者继承 UIComponent子类的类。
使用类作为自定义组件的超类,取决于你要实现的功能。例如,你或许需要一个自定义的按钮控件。你可以创建一个UIComponent类的子类,然后重写Flex Button 类的所有功能。更好更快创建自定义按钮组建的方法是创建一个Flex Button组件的子类,然后在自定义类中进行修改。
下面贴出代码【说明:一切都要从重用性来考虑,否则没有必要用构建组件】,仅供参考
PaddedPanel.as
package components
{
import mx.containers.Panel;
public class PaddedPanel extends Panel
{
public function PaddedPanel()
{
// Call the constructor of the superclass.
super();
// Give the panel a uniform 10-pixel
// padding on all four sides.
setStyle("paddingLeft", 10);
setStyle("paddingRight", 10);
setStyle("paddingTop", 10);
setStyle("paddingBottom", 10);
}
}
}
NumericDisplay.as
CountryComboBox.as 主应用程序mxml
当使用ActionScript组件的普遍目的是创建可配置和可重用的组件。例如,创建一个ActionScript组件,它带有属性,分发时间,定义了新的样式,具有自定义的皮肤,或其他的个性化的设置。
这个例子是自己定义自己的组件,MXML都是浮云,ActionScript才是核心啊,总算是看出点门道了 package components
{
import flash.events.Event;
import flash.events.MouseEvent;
import mx.containers.Tile;
import mx.containers.VBox;
import mx.controls.Button;
import mx.controls.TextInput;
import mx.events.FlexEvent;
public class NumericDisplay extends VBox
{
private var display:TextInput;
private var buttonsTile:Tile;
// Expose the _numButtons property to the
// visual design view in Flex Builder 3.
[Inspectable(defaultValue=10)]
private var _numButtons:uint = 10;
//原来主应用程序中的引用本类的组件属性是取决于改自定义组件类是否定了了set方法而已,当然属性名称与set方法名称一致
private var _max:int=90;
public function set max(v:int):void{
}
public function get max():int{
return _max;
}
public function NumericDisplay()
{
addEventListener(FlexEvent.INITIALIZE, initializeHandler);
}
// numButtons is a public property that determines the
// number of buttons that is displayed
[Bindable(event="numButtonsChange")]
public function get numButtons():uint
{
return _numButtons;
}// //当numButtons被赋值时,发出numButtonsChanage事件,通知所有被绑定的getter方法执行一遍
public function set numButtons(value:uint):void
{
_numButtons = value;
dispatchEvent(new Event("numButtonsChange"));
}
// Gets called when the component has been initialized
private function initializeHandler(event:FlexEvent):void
{
// Display the component
paint();
}
// Add the label of the clicked button to the display
private function buttonClickHandler(event:MouseEvent):void
{
display.text += (event.target as Button).label;
}
// Display the component
private function paint():void
{
// Create the number display
display = new TextInput();
display.width=185;
addChild(display);
// Create a Tile container to
// hold the buttons.
buttonsTile = new Tile();
addChild (buttonsTile);
// Create the buttons and add them to
// the Tile container.
for (var i:uint = 0; i < _numButtons; i++)
{
var currentButton:Button = new Button();
currentButton.label = i.toString();
currentButton.addEventListener(MouseEvent.CLICK, buttonClickHandler);
buttonsTile.addChild (currentButton);
}
}
}
}
package components
{
import mx.controls.ComboBox;
import flash.events.Event;
public class CountryComboBox extends ComboBox
{
private var countryArrayShort:Array = ["US", "UK"];
private var countryArrayLong:Array = ["United States", "United Kingdom"];
// Determines display state. The inspectable metadata tag
// is used by Flex Builder 3.
[Inspectable(defaultValue=true)]
private var _useShortNames:Boolean = true;
// Implicit setter
public function set useShortNames(state:Boolean):void
{
// Call method to set the dataProvider based on the name length.
_useShortNames = state;
if (state)
{
this.dataProvider = countryArrayShort;
}
else
{
this.dataProvider = countryArrayLong;
}
// Dispatch an event when the value changes
// (used in data binding).
dispatchEvent(new Event("changeUseShortNames"));
}
// Allow other components to bind to this property
[Bindable(event="changeUseShortNames")]
public function get useShortNames():Boolean
{
return _useShortNames;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955"
minHeight="600"
xmlns:components="components.*">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Script>
<![CDATA[
import flash.events.Event;
private function handleCloseEvent(eventObj:Event):void
{
status.text = "You selected: \r" + countries.selectedItem as String;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<components:PaddedPanel title="Custom component inheritance">
<components:CountryComboBox id="countries" useShortNames="false"/>
<!--
Use data binding to display the latest state
of the property.
-->
<mx:Label text="useShortNames = {countries.useShortNames}"/>
<mx:ControlBar horizontalAlign="right">
<mx:Button
label="Toggle Display"
click="countries.useShortNames = !countries.useShortNames;"
/>
<mx:Text id="status" text="Please select a country from the list above." width="136"/>
<components:NumericDisplay numButtons="9" />
</mx:ControlBar>
</components:PaddedPanel>
</s:Application>
当创建一个自定的ActionScript组件时,一个设计上要考虑的事情是可重用性。也就是说,你希望创建一个紧紧的绑定带你的应用程序的组件,还是能够在多个应用中可重用的组件?
编写与特定应用程序紧耦合的组件,经常是组件依赖于应用程序的结构,变量名或其他细节。如果你改变了应用程序,你可能需要修改紧耦合的组件来反映这种变化。一个紧耦合的组件,在没有重写的情况下很难应用到其他应用程序中。
设计一个松耦合的组件用于重用。松耦合的组件需要有清晰可辨的接口来指定如何向组件传递信息,如何将将结果传回应用程序。
典型的松耦合组件是使用属性来向组件传递信息。这些属性通过默认存取器(setter和getter方法)来定义,指定参数的类型。在下边的例子中,CountryComboBox自定义组件定义了公共的userShortNames属性,此属性通过使用get userShortNames()和set useShortNames()存取器方法暴露_ userShortNames私有属性。
私有属性_userShortNames的Inspectable 元数据标签定义了一个特性,这个特性出现在Adobe? Flex? Builder?中的属性提示和标签内省器中。也可以使用这个元数据标签限制允许的属性值。
注意:所有公共属性出现在MXML的代码提示和属性检查器中。如果你有关于属性的额外的信息,这些信息能够帮助代码提示或属性检查器(像枚举型的值,或这个字符串实际是文件路径),那么也把额外的信息添加到[Inspectable]元数据中。
MXML代码提示和属性检查器来于相同的数据,所以,如果在一个中显示出来那么在另一个中也应该一直显示出来。
在另一方面,ActionScript代码提示,不需要元数据也可以正常工作,所以你在ActionScript中依据所在的上下文一直都可以看待适当的代码提示。Flex Builder使用public/protected/private/static等等修饰符加当前所在范围计算出ActionScript代码提示。
定义组件向主应用程序返回信息的最佳实践是设计组件分发事件,事件中包含要返回的数据。那样,主函数能够定义时间监听器来处理时间,并且采取适当的行动。也可以使用数据绑定在事件中。在下边的例子中,使用Bindable元数据标签是userShortName编程一个被绑定的属性。隐含的 userShortName属性的setter发送改变事件,这个过程使用了的Flex 框架的内部的机制,来使数据绑定正常工作。
发表评论
-
全面认识Flex六大要素
2011-05-08 12:56 869在学习Flex应用程序的 ... -
Flex4之将Sprite控件添加到FLEX UI中
2011-05-08 12:54 1407在Flex的帮助文档里,有很多例子都是扩展Sprite类的。如 ... -
Flex4之元数据标签详解
2011-05-07 23:57 1326Flex 元数据标签 1、[ArrayElementT ... -
Flex4之关于Embed外部资源的使用方法
2011-05-07 20:56 1048Flex软件中经常需要 ... -
Flex获取RGB的值,R、G、B
2011-05-06 20:35 1024<?xml version="1.0" ... -
Flex自制简单菜单
2011-05-06 20:22 988<?xml version="1.0" ... -
Flex4之为ToolTip设置旋转特效及字体
2011-05-05 21:04 1797<?xml version="1.0" ... -
Flex的Alert中加入超链接
2011-05-05 20:57 1253<?xml version="1.0" ... -
FLEX4之内存释放优化原则
2011-05-05 13:28 7011. 被删除对象在外部的所有引用一定要被删除干净才能被系统 ... -
Flex4之简易MP3播放器
2011-05-03 20:55 1130<?xml version="1.0" ... -
Flex4之DataGrid示例【客户端和服务器端]
2011-05-03 19:27 1740由于我的DataGrid与JAVA后 ... -
Flex4表单验证
2011-05-01 22:34 2037这里主要讲Combox的验证。其他几个略带说说。 ... -
Flex4之与后台服务器通信方式:URLRequest+URLLoader【JAVA方式】
2011-04-21 20:16 1930URLRequest是ActionScript和服务端通信的最 ... -
Flex4 事件详解
2011-04-17 16:10 1013第一、Flex事件简介 ... -
向Tree空间添加删除XML数据节点_Flex4
2011-03-31 20:50 2104Flex4控件例程: 基于Http ...
相关推荐
《使用ActionScript 3.0组件》是Flex学习者必读的经典著作,它深入浅出地介绍了如何在Flex...配合压缩包中的"FLASH四宝贝之-使用ActionScript 3.0组件.pdf"阅读,相信你能更深入地理解和掌握Flex RIA开发的核心技术。
- **定义与分类**:高级组件是指那些在基础组件之上进行了功能扩展或定制的组件。它们可以是现有Flex组件的子类,也可以是从`UIComponent`类派生的新组件。 - **简单组件与高级组件的区别**:简单组件通常是通过修改...
Flex4允许开发者在ActionScript中使用声明式语法,这扩展了ActionScript的功能,使其能与MXML一起工作。通过在ActionScript类中声明变量和属性,我们可以创建组件实例、设置属性并处理事件,无需像传统面向对象编程...
1. **理解组件基础**:简单组件通常是已存在的Flex组件的子类,通过修改父组件的`skins`或`styles`属性来调整外观或增加新功能。例如,可以通过为`Button`控件添加新的事件类型或更改`DataGrid`控件的默认样式和皮肤...
4. **组件架构**:Flex 3.3包含了丰富的UI组件库,这些组件基于ActionScript构建,具有高度可定制性。开发者可以学习如何创建和使用这些组件,以及如何扩展和自定义组件。 5. **XML处理**:ActionScript 3.0提供了...
### Flex 重写组件详解 #### 一、为何需要重写Flex组件? 在Flex开发过程中,经常遇到已有的组件...无论是从使用者的角度考虑需求,还是站在设计者的角度规划组件的架构,都需要深入理解Flex的组件模型和技术细节。
3. **依赖注入**:Flex支持依赖注入框架,如Spring ActionScript或Injector4Flex,它们允许在组件构造时自动注入依赖项,包括数据。这样可以实现松耦合,并简化参数传递。 4. **应用级别的数据存储**:Flex提供全局...
这份“Flex ActionScript3.0 API中文帮助文档”是官方发布的,旨在为开发者提供详细的API参考,帮助他们更好地理解和使用ActionScript 3.0。 API(Application Programming Interface)是一组预先定义的函数、类、...
ActionScript与Flex结合使用时,Flex框架提供了一个强大的MXML标记语言,可以简化UI组件的声明和事件处理。自定义组件和事件在Flex应用程序中发挥着关键作用,使开发者能够构建高度定制的用户界面和交互逻辑。 总的...
在这一部分中,我们将深入探讨如何使用FLEX和Actionscript开发FLASH游戏,特别是关于增加敌机和游戏者的武器。在前四部分的学习中,我们已经构建了基础的游戏框架,包括用户输入和滚动背景。现在,我们将利用已有的...
综上所述,这段代码展示了如何使用FLEX和Actionscript创建一个具有交互性、射击机制和基本屏幕约束的玩家对象。碰撞检测、游戏循环、资源管理和用户输入响应是构建Flash游戏的关键组成部分。通过理解并扩展这些概念...
开发Flash游戏时,通过组合使用Flex组件、ActionScript的面向对象特性以及对事件处理的巧妙利用,可以创建复杂的游戏逻辑和动态的视觉效果。`Level`类展示了如何组织游戏的关卡管理,通过时间和事件驱动来控制游戏...
### Flex3组件和框架的生命周期 #### 知识点概览 - **Flex3简介** - **Flex3组件生命周期** - 构造阶段 - 添加阶段 - 初始化阶段 - 失效机制阶段 - 生效机制阶段 - 更新阶段 - 移除阶段 - **Flex应用程序...
在本篇关于使用FLEX和Actionscript开发FLASH游戏的文章中,我们将专注于游戏对象管理器(GameObjectManager)的实现,特别是碰撞检测这一关键功能。GameObjectManager是游戏引擎的核心组件,负责处理游戏对象的生命...
Flex3 是 Adobe 开发的一种用于构建富互联网应用程序(RIA)的框架,它基于 ActionScript 3.0 和 Flash Player 或 AIR 运行时环境。在深入理解 Flex3 的组件和框架生命周期之前,我们需要先了解 Flex 的历史背景以及...
### 使用FLEX 和 Actionscript 开发 FLASH 游戏——碰撞检测 #### 一、概述 在继续探索如何使用 FLEX 和 ActionScript 开发 FLASH 游戏的过程中,本篇重点介绍了碰撞检测这一关键技术,并通过具体代码示例展示了...
- Image组件是Flex的基础UI组件之一,用于在用户界面中显示图像。它可以显示JPEG、PNG、GIF、BMP等格式的图片。 - 与早期Flex版本相比,Flex4中的Image组件有了显著改进,提供了更好的性能和更多的功能选项。 2. ...
1. **ARIA角色和属性**:使用ARIA(Accessible Rich Internet Applications)标准来定义组件的角色和状态,从而帮助辅助技术工具更好地理解组件的作用。 2. **键盘导航**:确保组件可以通过键盘进行导航,这对于那些...
5. **Flex组件**:ActionScript3与Flex组件库紧密配合,让你能够轻松构建用户界面。掌握Button、TextInput、Canvas等基本组件的使用,以及如何自定义组件和使用布局管理器,将大大提高你的开发效率。 6. **网络通信...