以加载一个XML文档为例
首先创建一个名为DataLoader的ActionScript Class,用来处理数据加载和分析工作。
package net { //events.ContentEvent为自定义的Event类 import events.ContentEvent; import flash.events.ErrorEvent; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.net.URLLoader; import flash.net.URLRequest; import mx.collections.ArrayCollection; //添加元数据方便MXML代码提醒 [Event(name="dataBack", type="events.ContentEvent")] [Event(name="dataError", type="events.ContentEvent")] public class DataLoader extends EventDispatcher { protected var _loader:URLLoader; public function DataLoader() { super(); _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 ev:ContentEvent = new ContentEvent(ContentEvent.DATA_BACK); ev.users = users; dispatchEvent(ev); } protected function onError(event:ErrorEvent):void { var ev:ContentEvent = new ContentEvent(ContentEvent.DATA_ERROR); ev.error =event.text; dispatchEvent(ev); } } }
然后创建一个事件处理的自定义ContentEvent
package 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 error: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,bubbles,cancelable); event.users = users; event.error = error; return event; } } }
以上,DataLoader对于数据处理的逻辑就完成了,现在要创建一个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" applicationComplete="init()" xmlns:net="net.*"> <fx:Script> <![CDATA[ import events.ContentEvent; import mx.collections.ArrayCollection; import mx.controls.Alert; import net.DataLoader; protected function init():void { var dataLoader:DataLoader = new DataLoader(); dataLoader.addEventListener(ContentEvent.DATA_BACK,onData); dataLoader.addEventListener(ContentEvent.DATA_ERROR,onError); dataLoader.load("data/content.xml"); } protected function onData(event:ContentEvent):void { userList.dataProvider = event.users; } protected function onError(event:ContentEvent):void { Alert.show(event.error,"Error!"); } ]]> </fx:Script> <s:Panel verticalCenter="0" horizontalCenter="0" title="Mix" width="450" height="300"> <s:List id="userList" width="100%" height="100%"/> </s:Panel> </s:Application>
关于传入的XML,在于data/content.xml
<?xml version="1.0" encoding="UTF-8"?> <users> <user name="" site=""/> </users>
的形式。