flex自定义事件、简单例子说明
### Flex自定义事件详解 Flex 是一款用于构建和部署跨平台桌面应用与移动应用的开源框架,它基于Adobe Flash Platform。在Flex应用开发过程中,事件处理机制是非常重要的一个环节,而自定义事件则是这一机制中的高级特性之一。下面将详细介绍Flex自定义事件的相关知识点。 #### 1. 自定义事件的意义 在Flex应用中,事件是一种对象,表示应用程序或用户界面中的某些行为或状态变化。默认情况下,Flex提供了许多内置事件类型,如`MouseEvent.CLICK`等,但有时我们可能需要创建自己的事件类型来更好地满足特定需求。例如,当需要传递额外的数据或者触发一系列特定操作时,使用自定义事件就显得非常必要了。 #### 2. 创建自定义事件类 要创建自定义事件,首先需要继承自`Event`类,并重写构造函数。以下代码展示了如何创建一个名为`MyEvent`的自定义事件类: ```actionscript package ascode { import flash.events.Event; public class MyEvent extends Event { public var arg:String; // 定义一个公共属性用于存储自定义数据 public function MyEvent(arg:String, type:String) { // 构造函数接收两个参数:自定义数据和事件类型 super(type); this.arg = arg; } } } ``` 这里定义了一个名为`MyEvent`的类,该类继承自`Event`。通过定义一个名为`arg`的公共属性来存储自定义数据,这个属性将在创建事件实例时传入。 #### 3. 使用自定义事件 接下来,我们需要在MXML或ActionScript代码中使用自定义事件。下面是一个简单的示例,演示如何在Flex应用中创建并分发`MyEvent`事件: ```xml <?xml version="1.0" encoding="utf-8"?> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" creationComplete="init()"> <mx:Metadata> [Event(name="MY_CLICK", type="ascode.MyEvent")] </mx:Metadata> <mx:Script> <![CDATA[ import ascode.MyEvent; public function init():void { mybut.addEventListener(MouseEvent.CLICK, mybutclick); } private function mybutclick(event:MouseEvent):void { var me:MyEvent = new MyEvent(myvalue.text, "MY_CLICK"); this.dispatchEvent(me); } ]]> </mx:Script> <mx:Button id="mybut" x="167" y="116" label=""/> <mx:TextInput id="myvalue" x="167" y="86"/> </mx:Canvas> ``` 在这个例子中: - 我们首先在`<mx:Canvas>`元素上定义了一个名为`MY_CLICK`的新事件类型,并指定其类型为`ascode.MyEvent`。 - 在初始化函数`init()`中,我们为按钮`mybut`添加了一个点击监听器`mybutclick`。 - 当按钮被点击时,`mybutclick`函数会被调用,创建一个新的`MyEvent`实例,并通过`dispatchEvent()`方法将其分发出去。 #### 4. 监听自定义事件 为了响应自定义事件,我们需要在感兴趣的组件上添加事件监听器。例如,在另一个MXML文件中,我们可以这样监听`MY_CLICK`事件: ```xml <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="comp.*"> <mx:Script> <![CDATA[ import ascode.MyEvent; import mx.controls.Alert; function mcclick(event:MyEvent):void { Alert.show(event.arg); } ]]> </mx:Script> <ns1:MyComp x="130" y="84" MY_CLICK="mcclick(event)"/> </mx:Application> ``` 这段代码中,我们在`MyComp`组件上注册了一个事件处理器`mcclick`,该处理器会在接收到`MY_CLICK`事件时显示一个弹窗,并展示事件中携带的数据。 #### 5. 总结 通过上述示例,我们可以看到Flex自定义事件的强大功能及其在实际项目中的应用。自定义事件不仅可以帮助我们更好地组织代码逻辑,还能实现更复杂的交互需求。掌握如何创建和使用自定义事件对于提高Flex应用的开发效率和维护性至关重要。
首先 我建立了一个自定义的事件类,他必须继承Event类,具体代码如下:
package ascode
{
import flash.events.Event;
public class MyEvent extends Event
{
public var arg:String; //这里我加了一个public变量,就是为了能让这个事件传递参数
public function MyEvent(arg:String,type:String) //type是继承Event中在构造方法中必须写的,用来标识我们的事件
{
super(type);
this.arg = arg;
}
}//这样在发生这个Event的时候我就可以通过event.arg来得到arg的值了
第二步:建立一个自定义控件,具体代码如下
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" creationComplete="init()">
<mx:Metadata>
[Event(name="MY_CLICK",type="ascode.MyEvent")]
</mx:Metadata>//这里利用元数据修饰符来向project全局表明现在在这个控件中多了一个MY_CLICK事件,他和click等事件时一样的调用方法,这个应该还有其他的作用,但是如果去掉这句话的时候再fb的eclipse插件中会出现错误提示,但是运行能出正确结果,具体我也不知道原因。
<mx:Script>
<![CDATA[
import ascode.MyEvent;
public function init():void{
mybut.addEventListener(MouseEvent.CLICK,mybutclick);
}
- skydream_xu2012-03-23从这个例子知道了自定义组件如何添加自定义事件,有个疑问,若自定义组件没有任何事件,如何调用呢?
- 粉丝: 4
- 资源: 22
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助