flex 继承EventDispatcher,实现异步操作的总结


  最近在做读XML文件,然后显示出xml文件的内容。
  读没有什么大的问题,但是在显示的时候,一开始以为直接读就行,结果发现flex中的URLLoader是异步执行的,所以显示的时候,总是空的。郁闷死了,先是想做个标志位,后来觉得他麻烦,不可能让他一直在那死循环吧,否决掉。后来想用Timer休眠,发现好像也不是什么好办法。想啊想,想到一个词,异步。赶紧上网搜,果然适合.
  因为Flex做的是客户端,所以异步操作是很正常的事情,为了界面友好性嘛,然后开始研究怎么实现异步:
  先谈谈自己对异步的理解:异步者,异步也,事情非同时顺序执行,而是分开先后执行。就像你去给boss打电话领工资,但是boss做账很忙,暂时没法理你,你不能老是不停的打吧,或者堵着门不让别人进,这是不礼貌的,这时候你就可以通过秘书,挂个号,一旦老板帐弄好了,秘书就会通知你去领钱。多方便啊,中间你爱干嘛干嘛去,看看小说,瞅瞅美女,骚扰骚扰小妹,自由自在的很,反正可以领钱的时候,秘书MM会通知的。
  第一步:发饷日子到了,启动发饷程序。(初始化,实现读取XML文件)
  /**
  * 读取XML文件工具,继承了EventDispatcher,实现异步消息通知  * */ public class ReadToolsListFromXML extends EventDispatcher { static var tools:XML; static var xmlURL:String = "config/ToolsList.xml"; static var loadXML:URLLoader ; [Event("Complete", "LoadXMLCompleteEvent")]  //构造函数,进行xml文件读取的工作 public function ReadToolsListFromXML() {  var reqXmlURL:URLRequest = new URLRequest(xmlURL);//请求xml文件 try{ loadXML = new URLLoader(reqXmlURL);//加载xml文件 }catch(error:SecurityError){ trace("A SecurityError has occurred."); } loadXML.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); loadXML.addEventListener(Event.COMPLETE,xmlLoaded) ;//加载完成后,读取xml文件到相应操作对象中 }
  第二步:老板做账,做完后,告诉秘书,可以发钱了。(读取xML文件到相应的操作对象,并发布读取完成消息)
  //加载xml文件到相应的对象,并发布消息
  function xmlLoaded(event:Event):void { try { tools = XML(loadXML.data); trace(tools.toXMLString()); var eve:LoadXMLCompleteEvent = new LoadXMLCompleteEvent("Complete");//读取完成消息 dispatchEvent(eve);//将寻找注册了改消息的消息监听器匹配,并触发该监听器 } catch (e:TypeError) {
  trace("Could not parse the XML file.");
  }
  }
  第三步:自由散漫的我,该收收心,拿钱去了。(监听消息的消息监听器开始进行后续处理)
  
  
       PS:补充一句,秘书MM很漂亮,所以咱说话得好听点啊,让人家印象深刻。(定义自己的消息)
  噢了。事后想想,还真挺方便。如有描述不对之处,还请各位大牛指点。

你可能感兴趣的:(dispatcher)