该实例使用URLLoader向服务器获取XML和txt(properties格式数据)数据,由于获取数据由URLLoader完成,我将些操作单独放到另一个as文件中,故与视图组件分开,那么如何通告视图组件已完成数据加载功能呢?我在自己的as文件中自定义了一个事件,当URLLoader完成数据加载时,发布自定义的事件并将数据随事件一起分布,再在视图组件中订阅自定义的事件。
一、先来认识一下URLLoader:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" fontSize="12" backgroundGradientAlphas="[1.0, 1.0]"
backgroundGradientColors="[#FB7305, #FAE605]" width="621" height="385">
<mx:Script>
<![CDATA[
import com.mengya.URLLoaderTxt;
internal function doTXT():void{
var urlLoaderTxt:URLLoaderTxt = new URLLoaderTxt();
}
]]>
</mx:Script>
<mx:Button x="49" y="40" label="测试URLLoader,读取文本" width="193" height="30" click="doTXT();"/>
</mx:Application>
URLLoaderTxt 类如下:
package com.mengya{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IEventDispatcher;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
public class URLLoaderTxt extends Sprite {
public function URLLoaderTxt(){
var loader:URLLoader = new URLLoader();
//订阅URLLoader的事件
configListeners(loader);
var request:URLRequest = new URLRequest("myTxt.txt");
loader.load(request);
}
private function configListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE,loaderComplete);
dispatcher.addEventListener(Event.OPEN,openLoader);
}
private function loaderComplete(event:Event):void {
var urlLoader:URLLoader = URLLoader(event.target);
trace(urlLoader.data)
var urlVariables:URLVariables = new URLVariables(urlLoader.data);
trace(urlVariables.msg);
}
private function openLoader(event:Event):void{
trace("打开连接");
}
}
}
对URLLoader功能有初步的认识以后完成以上的功能,如下:
mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" fontSize="12" backgroundGradientAlphas="[1.0, 1.0]"
backgroundGradientColors="[#FB7305, #FAE605]" width="621" height="385"
applicationComplete="initApp();">
<mx:Script>
<![CDATA[
import com.mengya.LoadFinishEvent;
import com.mengya.URLLoaderXML;
[Bindable]
private var dp:XMLList;
internal function initApp():void{
//添加自己定义的数据加载完成事件
URLLoaderXML._eventDispatcher.addEventListener(LoadFinishEvent.LOADFINISHED,onLoadFinished);
}
internal function doXML():void{
var urlLoaderXML:URLLoaderXML = new URLLoaderXML();
}
internal function onLoadFinished(event:LoadFinishEvent):void{
dp = new XMLList(event.data);
}
]]>
</mx:Script>
<mx:Button x="49" y="88" label="测试URLLoader,读取XML" width="193" height="30" click="doXML();"/>
<mx:DataGrid x="49" y="147" width="529" height="193" dataProvider="{dp}">
<mx:columns>
<mx:DataGridColumn headerText="姓名" dataField="name" fontFamily="宋体" resizable="true"/>
<mx:DataGridColumn headerText="电话" dataField="phone" fontFamily="宋体" resizable="true"/>
<mx:DataGridColumn headerText="邮箱" dataField="email" fontFamily="宋体" resizable="true"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
自定义事件类LoadFinishEvent如下:
package com.mengya{
import flash.events.Event;
//自己定义一个事件,用于发布数据加载完成,将加载完数据随事件一起发布
public class LoadFinishEvent extends Event{
public static const LOADFINISHED:String = "Loadfinished";
public var data:String;
public function LoadFinishEvent(type:String,
data:String,
bubbles:Boolean=false,
cancelable:Boolean=false){
this.data = data;
super(type,bubbles,cancelable);
}
}
}
完成发布自定义的事件的类如下:
package com.mengya
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.net.URLLoader;
import flash.net.URLRequest;
//这是一个非视图组件,在向服务器获取数据后发布一个自定义的事件,并将数据随着事件一起发布
public class URLLoaderXML extends Sprite{
public static var _eventDispatcher:EventDispatcher = new EventDispatcher();
public function URLLoaderXML(){
var loader:URLLoader = new URLLoader();
//配置对URLoader的事件订阅
configureListeners(loader);
var request:URLRequest = new URLRequest("XMLFile.xml");
try{
//获取指定的XML数据
loader.load(request);
}catch(error:Error){
trace(error.message);
}
}
private function configureListeners(dispatcher:IEventDispatcher):void{
//订阅了URLLoader的Event.COMPLETE事件,表示加载完成
dispatcher.addEventListener(Event.COMPLETE,completeHandler);
}
public function completeHandler(event:Event):void{
var urlloader:URLLoader = URLLoader(event.target);
//urlloader.data已包含加载来的数据
trace(urlloader.data);
//发布自定义的事件,并将所加载完成的数据随事件一起发布,用于在视图组件订阅捕获
var evt:LoadFinishEvent = new LoadFinishEvent(LoadFinishEvent.LOADFINISHED,
urlloader.data);
_eventDispatcher.dispatchEvent(evt);
}
}
}
分享到:
相关推荐
Flex之URLLoader加载XML 使用URLLoader加载XML
很久之前无聊的时候用flex实现的一个BullBreaker小游戏,点击小球可消除周围同色小球,可以回滚操作至起始状态。swf格式的可以直接在视频播放器中打开来玩,也可以打开html文件在浏览器中玩(需要flash支持)。
Flex与后台交互的方法_HTTPService_WebService_URLLoader
as3中用URLLoader动态加载XML
第十二节 URLLoader与后台交互.docx
AS3 中使用 URLRequest 和 URLLoader 与服务器交互
包裹插件网址加载器在js和css使用base64编码文件(包括sass / less等) 插件将取消链接production文件(parcel env)安装yarn add parcel-plugin-url-loader --dev ornpm i parcel-plugin-url-loader --save-dev用法...
AS3 中使用 URLRequest 和 URLLoader 与服务器交互
用httpservice和urlloader方法读xml里的数据
本教程为 Flex+ASP.NET+Access 的留言簿... 提交篇-讲述使用Flex通过ASP.NET向Access数据库写入数据,分为HTTPService版和URLLoader版。 显示篇-讲述使用ASP.NET读取Access数据库并生成xml文件,再通过Flex显示出来。
网址加载器只是一个简单的网页加载器:3我经常忘记这些东西:3,而从其他项目中查找却是一件痛苦的事情:3现在它将被保存:v
在本系列前面几篇文章中分别介绍了通过WebService、HTTPService、URLLoader以及FielReference等组件或类来完成Flex与.NET服务端的通信的相关知识点。
网址加载器 Yii2 的多线程下载器链接。 安装 安装此扩展的首选方式是通过 composer。 将"paulzi/yii2-urlloader": "*"到 require 部分并 ... 'class' => 'paulzi\urlloader\UrlLoader' , // 'on success'
简单的读取XML:加载部分var myXML:XML = new XML(); var XML_URL:String = "dat.xml"; var myXMLURL:URLRequest = new URLRequest(XML_URL);...var myLoader:URLLoader = new URLLoader(myXMLURL);
import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.*; import flash.net.URLVariables; public class HttpRequest { private var loader:URLLoader;// private var ...
URLLoader(URLStream) FlashRemoting XMLSocket(Socket) FMS/FCS
flash as3 加载外部swf jpg gif png loader urlloader的通用代码