var myXml = new XML();
myXml.ignoreWhite = true;
myXml.load("*.xml");
myXml.onLoad = function(suc) {
if(suc) {
//这里是XML文档载入Flash后执行的语句
}
}
然后一大堆的代码都会堆砌在
if(suc) {
//这里是XML文档载入Flash后执行的语句
}
判断语句中。这种方法我总是觉得代码太多也不够清晰。
如果换一种方法:
import com.flashshe.LoadXml;
var me:LoadXml = new ("*.xml",true);
var lis:Object = new Object();
lis.complete = function(evt) {
//这里是XML文档载入Flash后执行的语句
}
myXml.addEventListener("complete",lis);
感觉如何?我喜欢第二种方法,因为第二种方法相对于第一种方法有几个优点:
(注:第二种方法内部已经包含了XML.ignoreWhite = true )
1、结构更清晰;
2、写的代码更少
3、使用 广播/监听 事情模型
如果你定义了两个或更多的XML对象,你就会发现上面1和2的优点了。
个人认为最大的优点是能使用 广播/监听 事情模型。仁者见仁,智者见智。
下面是LoadXml类完整代码:
//导入EventDispatcher类
import mx.events.EventDispatcher;
class com.flashshe.LoadXml {
//每个LoadXml实例初始化时都会定义一 XML 对象
private var _xml:XML;
//外部XML文档路径
private var _url:String;
//定义EventDispatcher中使用的 dispatchEvent,addEventListener 和 removeEventListener 方法
public var dispatchEvent:Function;
public var addEventListener:Function;
public var removeEventListener:Function;
function LoadXml(u:String,b:Boolean) {
_xml = new XML();
_xml.ignoreWhite = true;
_url = u;
mx.events.EventDispatcher.initialize(this);
initLoad(b)
}
private function initLoad(b:Boolean):Void {
if(b) load();
}
//载入外部XML文档,载入完成后广播 Complete 事件
public function load():Void {
_xml.load(_url);
var _LoadXml = this;
_xml.onLoad = function(suc){
if(suc) _LoadXml.setComplete(suc);
};
}
function get xml() {
return _xml;
}
//广播 Complete 事件
private function setComplete(b:Boolean):Void {
var eventObject:Object = {target:this, type:'complete'};
dispatchEvent(eventObject);
}
}