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

flex_如何创建自定义事件示例;

发布时间:2020-12-15 05:10:23 所属栏目:百科 来源:网络整理
导读:功能:从xml文件中加载数据,然后在list组件上显示出数据来。 =userContent.xml文件 ?xml version="1.0" encoding="UTF-8"? users ?? ?user name="唐龙" site="http://www.tanglong.com"/ ?? ?user name="楚源" site="http://www.chuyuan.com"/ ?? ?user nam

功能:从xml文件中加载数据,然后在list组件上显示出数据来。

=>userContent.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<users>
?? ?<user name="唐龙" site="http://www.tanglong.com"/>
?? ?<user name="楚源" site="http://www.chuyuan.com"/>
?? ?<user name="徐泽" site="http://www.xuze.com"/>
?? ?<user name="罗锋" site="http://www.luofeng.com"/>
?? ?<user name="韩立" site="http://www.hanli.com"/>
</users>


=>ContentEvent.as自定义事件文件

// 自定义事件以便用于数据传输等等;
package net.events
{
?? ?import flash.events.Event;
?? ?
?? ?import mx.collections.ArrayCollection;
?? ?
?? ?public class ContentEvent extends Event
?? ?{
?? ??? ?// 声明事件类型_事件引用中使用的事件常量。
?? ??? ?public static const DATA_BACK:String = "dataBack";
?? ??? ?public static const DATA_ERROR:String = "dataError";
?? ??? ?
?? ??? ?// 自定义事件数据属性。
?? ??? ?public var users:ArrayCollection;
?? ??? ?public var errors:String;
?? ??? ?
?? ??? ?public function ContentEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false)
?? ??? ?{
?? ??? ??? ?super(type,bubbles,cancelable);
?? ??? ?}
?? ??? ?
?? ??? ?/*
?? ??? ?*覆盖此clone()函数说明:由于这个类只是一个基本框架,而所有自定义事件都应该重写Event.clone()方法。
?? ??? ?*如果没有重写该方法,但是事件被克隆,那么自定义数据就无法包含到克隆的事件中,这就意味着克隆的副本
?? ??? ?*与原始事件不一致。该方法只是创建事件的一个新实例,并按照当前属性设置新实例的属性,实际上就是事件
?? ??? ?*的一个完整克隆。
?? ??? ?*/
?? ??? ?override public function clone():Event{
?? ??? ??? ?var event:ContentEvent = new ContentEvent(type,cancelable);
?? ??? ??? ?event.users = users;
?? ??? ??? ?event.errors = errors;
?? ??? ??? ?return event;
?? ??? ?}
?? ?}
}


=>DataLoader.as加载数据类

package net
{
?? ?import flash.events.ErrorEvent;
?? ?import flash.events.Event;
?? ?import flash.events.EventDispatcher;
?? ?import flash.events.IEventDispatcher;
?? ?import flash.events.IOErrorEvent;
?? ?import flash.events.SecurityErrorEvent;
?? ?import flash.net.URLLoader;
?? ?import flash.net.URLRequest;
?? ?
?? ?import mx.collections.ArrayCollection;
?? ?
?? ?import net.events.ContentEvent;?? ?// 自定义事件;
?? ?
?? ?
?? ?/* 添加事件元数据,以便在MXML应用程序中可以这样使用:
?? ? * <fx:Declarations>
?? ? * ?? ??? ?<net:DataLoader id="dataLoader" dataBack="onData(event)" dataError="onError(event)"/>
?? ? * </fx:Declarations>
?? ? */
?? ?[Event(name="dataBack",type="net.events.ContentEvent")]
?? ?[Event(name="dataError",type="net.events.ContentEvent")]
?? ?/**
?? ? * 类功能:加载数据、分派完成和错误事件;
?? ? */
?? ?public class DataLoader extends EventDispatcher
?? ?{
?? ??? ?protected var _loader:URLLoader;
?? ??? ?
?? ??? ?public function DataLoader(target:IEventDispatcher=null)
?? ??? ?{
?? ??? ??? ?super(target);
?? ??? ??? ?
?? ??? ??? ?_loader = new URLLoader();
?? ??? ??? ?_loader.addEventListener(Event.COMPLETE,onComplete);?? ?// 数据加载完成后调用。
?? ??? ??? ?_loader.addEventListener(IOErrorEvent.IO_ERROR,onError);?? ?// 不能加载数据时调用;
?? ??? ??? ?_loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onError);
?? ??? ?}
?? ??? ?
?? ??? ?public function load(url:String):void{
?? ??? ??? ?_loader.load(new URLRequest(url));
?? ??? ?}
?? ??? ?
?? ??? ?protected function onComplete(event:Event):void{
?? ??? ??? ?var users:ArrayCollection = new ArrayCollection();
?? ??? ??? ?for each(var user:XML in XML(_loader.data).user) {
?? ??? ??? ??? ?users.addItem(user.@name + "_" + user.@site);
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ?
?? ??? ??? ?// 创建并分派自定义完成事件。
?? ??? ??? ?var customEv:ContentEvent = new ContentEvent(ContentEvent.DATA_BACK);
?? ??? ??? ?customEv.users = users;
?? ??? ??? ?dispatchEvent(customEv);
?? ??? ?}
?? ??? ?
?? ??? ?protected function onError(event:ErrorEvent):void{
?? ??? ??? ?// 创建并分派自定义错误事件。
?? ??? ??? ?var customEv:ContentEvent = new ContentEvent(ContentEvent.DATA_ERROR);
?? ??? ??? ?customEv.errors = event.text;
?? ??? ??? ?dispatchEvent(customEv);
?? ??? ?}
?? ??? ?
?? ?}
}


=>UsersView.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"
?? ??? ??? ??? minWidth="1024" minHeight="768" pageTitle="用户信息列表"
?? ??? ??? ??? applicationComplete="initFn()" xmlns:net="net.*">
?? ?
?? ?<fx:Script>
?? ??? ?<![CDATA[
?? ??? ??? ?import net.DataLoader;
?? ??? ??? ?import net.events.ContentEvent;
?? ??? ??? ?
?? ??? ??? ?protected function initFn():void{
?? ??? ??? ??? ?var dataLoader:DataLoader = new DataLoader();
?? ??? ??? ??? ?dataLoader.addEventListener(ContentEvent.DATA_BACK,onData);
?? ??? ??? ??? ?dataLoader.addEventListener(ContentEvent.DATA_ERROR,onError);
?? ??? ??? ??? ?dataLoader.load("net/data/userContent.xml");
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ?protected function onData(event:ContentEvent):void{
?? ??? ??? ??? ?userlist.dataProvider = event.users;
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ?protected function onError(event:ContentEvent):void{
?? ??? ??? ??? ?trace("=>Error: " + event.errors);
?? ??? ??? ?}
?? ??? ?]]>
?? ?</fx:Script>
?? ?
?? ?<fx:Declarations>
?? ??? ?<!-- 非可视元素 -->
?? ?</fx:Declarations>
?? ?
?? ?<!--view-->
?? ?<s:VGroup verticalCenter="0" horizontalCenter="0">
?? ??? ?<s:List id="userlist" width="250" height="120"/>
?? ?</s:VGroup>
?? ?
</s:Application>

提醒:只要复制粘贴就可以运行,唯一要注意的就是文件结构:


按照上边文件结构组织文件或者自己修改相关文件目录就ok。

(编辑:李大同)

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

    推荐文章
      热点阅读