加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

自定义事件

发布时间:2020-12-15 01:14:02 所属栏目:百科 来源:网络整理
导读:??????? Flex开发者离不开两件事:组件和事件。可以说,Flex开发就是基于组件的事件驱动编程,事件不仅能够帮助开发者响应用户操作、完成应用任务,更重要的是可以使开发者设计出松散耦合的Flex应用架构。和vb差不多,事件驱动模型是Flex开发的核心。 ??????
??????? Flex开发者离不开两件事:组件和事件。可以说,Flex开发就是基于组件的事件驱动编程,事件不仅能够帮助开发者响应用户操作、完成应用任务,更重要的是可以使开发者设计出松散耦合的Flex应用架构。和vb差不多,事件驱动模型是Flex开发的核心。

??????? 对于事件模型,我们可以用Flex架构为我们提供的事件,但更加灵活的是,我们可以自定义事件。这就为灵活开发提供了可能。与public属性类似,方法并不是应用架构的最佳实践。公共属性和方法使得组件代码的重用性降低。事件是组件间通讯的最佳信使。

通过自定义事件和自定义组件,Flex开发者能够设计出松散耦合的应用架构。

1.使用ActionScript定义自定义事件

??? 自定义事件只是一个“特别”的ActionScript类。开发者创建自定义事件无外乎完成如下几个任务:继承flash.events.Event、定义事件属性、编写类构造器、重载clone方法。

????? 1)继承flash.events.Event类。

????? 2)定义事件属性:从某种程度上来说,事件就是系统传递的“消息”。Flash Player利用事件对象从事件目标向事件监听器传递数据。在自定义事件中,通过定义属性,

???? 可以让事件携带更多的信息。

????? 3)编写类构造器:类离不开构造器,事件类的构造器要完成两项任务:调用Super(),设置属性。

????? 4)重载clone方法:创建自定义事件的最后一步是重载父类的clone方法,返回新的Event对象。当触发事件时,即dispatchEvent(event)时,EventDispatcher会自动调用clone方法获取新的event对象。

2.使用元数据[Event]定义事件

??? 使用MXML标签注册事件侦听器。

???? 如何让组件认识自定义的事件:通过[Event]元数据,开发者可以为组件定义事件。编译器能够把这些自定义的事件识别为MXML标签属性。使用[Event]既可以为ActionScript组件定义事件,也可以为MXML组件定义事件。

 [Event(name="SwitchLightEvent",type="events.SwitchLightEvent")]

3.触发事件

?? 使用dispatchEvent()方法触发事件。由于我们的自定义组件继承自(或间接继承自)EventDispatcher类,因此获得了触发事件的能力。dispatchEvent接受Event事件对象作为参数,也意味着在触发事件前,我们要创建事件对象的实例,而dispatchEvent方法把该事件对象调度到事件流中。

 private function clickEventHandler(varSelectedLight:String):void{

var evtObj:SwitchLightEvent=new SwitchLightEvent("SwitchLightEvent",varSelectedLight);

dispatchEvent(evtObj);

}

?4.创建事件监听器?

通过dispatchEvent方法触发事件后,Flash Player会在事件流中检查显示列表中的每个节点对象是否注册了

?? 事件侦听器。事件侦听器最终将完成对事件的响应处理。

?

例子:

Lights.mxml组件

<?xml version="1.0" encoding="utf-8"?>

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="300" height="30"

   horizontalCenter="center" creationComplete="init()">

<mx:Script>

<![CDATA[

[Bindable]

public var currentLight:String;

 

private function init():void{

currentLight="关闭";

}

]]>

</mx:Script>

<mx:Label id="lblLightInfo" x="12" y="4"

  horizontalCenter="0" textAlign="center" fontSize="16"

  text="{currentLight}"/>        

 

</mx:Canvas>

LightConsole.mxml组件

?

<?xml version="1.0" encoding="utf-8"?>

<mx:HBox xmlns:fx="http://ns.adobe.com/mxml/2009" 

 xmlns:s="library://ns.adobe.com/flex/spark" 

 xmlns:mx="library://ns.adobe.com/flex/mx" width="236" height="22">

<fx:Declarations>

<!-- 将非可视元素(例如服务、值对象)放在此处 -->

</fx:Declarations>

<fx:Metadata>

[Event(name="SwitchLightEvent",type="events.SwitchLightEvent")]

</fx:Metadata>

 

<fx:Script>

<![CDATA[

import events.SwitchLightEvent;

 

private function clickEventHandler(varSelectedLight:String):void{

var evtObj:SwitchLightEvent=new SwitchLightEvent("SwitchLightEvent",varSelectedLight);

dispatchEvent(evtObj);

}

]]>

</fx:Script>

<s:Button label="绿色" click="clickEventHandler('green')"/>

<s:Button label="红色" click="clickEventHandler('red')"/>

<s:Button label="黄色" click="clickEventHandler('yellow')"/>

</mx:HBox>

 


SwitchLightEvent类:

package events

{

import flash.events.Event;

 

public class SwitchLightEvent extends Event

{

private var selectedLight:String;

 

public function SwitchLightEvent(varType:String,varLight:String)

{

super(varType);

this.selectedLight=varLight;

}

 

override public function clone():Event{

return new SwitchLightEvent(type,selectedLight);

}

 

public function getSelectedLight():String{

return this.selectedLight;

}

}

}


?

CustomTrafficLightTest.mxml应用程序

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

   xmlns:views="views.*"

   minWidth="955" minHeight="600">

<fx:Declarations>

<!-- 将非可视元素(例如服务、值对象)放在此处 -->

</fx:Declarations>

<fx:Script>

<![CDATA[

import events.SwitchLightEvent;

 

[Bindable]

private var selectedLight:String;

 

private function switchEventHandler(event:SwitchLightEvent):void{

selectedLight=String(event.getSelectedLight());

}

]]>

</fx:Script>

<views:LightConsole x="158" y="124" SwitchLightEvent="switchEventHandler(event)"/>

<views:Lights x="148" y="65" width="246" currentLight="{selectedLight}"/>

</s:Application>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读