Flex与Java低数据量通信息二:URLLoader及非视图组件的事件发布订阅
该实例使用URLLoader向服务器获取XML和txt(properties格式数据)数据,由于获取数据由URLLoader完成,我将些操作单独放到另一个as文件中,故与视图组件分开,那么如何通告视图组件已完成数据加载功能呢?我在自己的as文件中自定义了一个事件,当URLLoader完成数据加载时,发布自定义的事件并将数据随事件一起分布,再在视图组件中订阅自定义的事件。
?
一、先来认识一下URLLoader:
?URLLoaderTxt 类如下:
?自定义事件类LoadFinishEvent如下:
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);}}}?