Walter She's Blog

flash,flex ,javascript原创教程,web设计,Flash RIA,其它与之相关的内容.

« 一种二维数组的定义方法怎样访问Window组件中的内容 »

一个关于XML的类: LoadXml

在Flash开发中我们经常会载入外部XML文档。每一次我都会这样来做。
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); 
  }
      
}

  • quote 1.暗泪
  • http://www.an86.net
  • 我有个更简的方法!


    class rss {
    private var myXML:XML;
    public function rss(curl:String) {
    var thisObj:rss = this;
    var temXML:XML = new XML();
    temXML.ignoreWhite = true;
    temXML.onLoad = function(success:Boolean) {
    if (success) {
    thisObj.myXML = this;
    if (temXML.loaded) {
    thisObj.init();
    }
    } else {
    trace("error loading XML");
    }
    };
    temXML.load(curl);
    }
    }
  • 2006-8-1 9:41:18 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表