action的使用之封装文本文件的加载

Action的使用非常的简单,当需要创建独立的业务逻辑时就创建一个继承于Action的动作类。下面以加载文本文件(包括xml文件)为例,我将创建一个类专门来封装加载文本的逻辑,最后返回结果:
/**
*加载文本的动作类
*/
package sunnyluo.myactions
{
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;

import sunnyluo.action.Action;
import sunnyluo.action.ActionEvent;

public class LoadTextFileAction extends Action
{
private var _url:String; //文本路径
private var _dataFormat:String; //读取文本的数据格式(字符串、二进制、url值对)
private var _urlLoader:URLLoader;

public function LoadTextFileAction(url_:String, dataFomat_:String = "text", name_:String = "")
{
super(name_);
_url = url_;
_dataFormat = dataFomat_;
}

//开始执行
override public function execute(event:ActionEvent = null):void
{
loadText();
}

private function loadText():void
{
var __request:URLRequest = new URLRequest(_url);
_urlLoader = new URLLoader();
_urlLoader.dataFormat = _dataFormat;
_urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIoError);
_urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
_urlLoader.addEventListener(Event.COMPLETE, onLoadComplete);
_urlLoader.load(__request);
}

//加载成功
private function onLoadComplete(event:Event):void
{
removeHandler();
var __data:*;
if(_urlLoader)
{
__data = _urlLoader.data;
}
this.actionCompleteHandler(__data);
}

//加载失败(找不到文件)
private function onIoError(event:IOErrorEvent):void
{
removeHandler();
trace(event.text, "LoadTextFileAction找不到文件:"+_url);
this.actionErrorHandler(event);
}

//加载失败(域错误)
private function onSecurityError(event:SecurityErrorEvent):void
{
removeHandler();
trace(event.text,"LoadTextFileAction域错误:"+_url);
this.actionErrorHandler(event);
}

//移除侦听
private function removeHandler():void
{

if(_urlLoader && _urlLoader.hasEventListener(Event.COMPLETE))
{
_urlLoader.removeEventListener(IOErrorEvent.IO_ERROR, onIoError);
_urlLoader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
_urlLoader.removeEventListener(Event.COMPLETE, onLoadComplete);
}
}

//重写销毁方法
override public function destroy():void
{
super.destroy();
removeHandler();
_urlLoader = null;
}

}
}


在主类中调用LoadTextFileAction:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()">
<mx:Script>
<![CDATA[
import sunnyluo.myactions.LoadTextFileAction;
import sunnyluo.action.ActionUtil;
import sunnyluo.action.IAction;
import sunnyluo.action.ActionEvent;
private function init():void
{
var __action:IAction = new LoadTextFileAction("resource/test.xml");
ActionUtil.addActionHandler(__action, onLoadComplete, onLoadError);
__action.execute();

function onLoadComplete(event:ActionEvent):void
{
var __str:String = String(event.data);
trace(__str);
}

function onLoadError(event:ActionEvent):void
{
//trace(event);
}
}
]]>
</mx:Script>
</mx:WindowedApplication>

按照最少知识的原则,主类只要和LoadTextFileAction、ActionUtil、接口IAction 打交道,只需侦听加载完成与失败的动作事件,无需知道加载的内部实现(如不需创建URLRequest 、URLLoader,也不需侦听URLLoader的事件)。而且LoadTextFileAction类也可以在以后的项目中复用了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值