功能:从xml文件中加载数据,然后在list组件上显示出数据来。
=>userContent.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user name="唐龙" site="http://www.tanglong.com"/>
<user name="楚源" site="http://www.chuyuan.com"/>
<user name="徐泽" site="http://www.xuze.com"/>
<user name="罗锋" site="http://www.luofeng.com"/>
<user name="韩立" site="http://www.hanli.com"/>
</users>
// 自定义事件以便用于数据传输等等;
package net.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 errors: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,cancelable);
event.users = users;
event.errors = errors;
return event;
}
}
}
=>DataLoader.as加载数据类
package net
{
import flash.events.ErrorEvent;
import flash.events.Event;
import flash.events.Eventdispatcher;
import flash.events.IEventdispatcher;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import mx.collections.ArrayCollection;
import net.events.ContentEvent; // 自定义事件;
/* 添加事件元数据,以便在MXML应用程序中可以这样使用:
* <fx:Declarations>
* <net:DataLoader id="DataLoader" dataBack="onData(event)" dataError="onError(event)"/>
* </fx:Declarations>
*/
[Event(name="dataBack",type="net.events.ContentEvent")]
[Event(name="dataError",type="net.events.ContentEvent")]
/**
* 类功能:加载数据、分派完成和错误事件;
*/
public class DataLoader extends Eventdispatcher
{
protected var _loader:URLLoader;
public function DataLoader(target:IEventdispatcher=null)
{
super(target);
_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 customEv:ContentEvent = new ContentEvent(ContentEvent.DATA_BACK);
customEv.users = users;
dispatchEvent(customEv);
}
protected function onError(event:ErrorEvent):void{
// 创建并分派自定义错误事件。
var customEv:ContentEvent = new ContentEvent(ContentEvent.DATA_ERROR);
customEv.errors = event.text;
dispatchEvent(customEv);
}
}
}
=>UsersView.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"
minWidth="1024" minHeight="768" pageTitle="用户信息列表"
applicationComplete="initFn()" xmlns:net="net.*">
<fx:Script>
<![CDATA[
import net.DataLoader;
import net.events.ContentEvent;
protected function initFn():void{
var DataLoader:DataLoader = new DataLoader();
DataLoader.addEventListener(ContentEvent.DATA_BACK,onData);
DataLoader.addEventListener(ContentEvent.DATA_ERROR,onError);
DataLoader.load("net/data/userContent.xml");
}
protected function onData(event:ContentEvent):void{
userlist.dataProvider = event.users;
}
protected function onError(event:ContentEvent):void{
trace("=>Error: " + event.errors);
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 非可视元素 -->
</fx:Declarations>
<!--view-->
<s:VGroup verticalCenter="0" horizontalCenter="0">
<s:List id="userlist" width="250" height="120"/>
</s:VGroup>
</s:Application>
提醒:只要复制粘贴就可以运行,唯一要注意的就是文件结构: