Flash + AS2.0 =在构造函数中加载XML文件

时间:2009-09-16 11:51:27

标签: flash class actionscript-2

如何使用构造函数加载XML,我需要将其解析为数组,并使用自定义类Menu

这是我的代码:

class Menu {
 // XML file's filename
 private var xmlFile:String = "menu.xml";
 private var menu:XML;
 private var menuArray:Array;
 private var mainmenu:Array;

 function Menu() {
  menu = new XML();
  menu.ignoreWhite = true;
  menu.load(xmlFile);

  menu.onLoad = function(success : Boolean) : Void {
   if (success) {
    // determine how many chambers there are now
    menuArray = menu.firstChild.childNodes;
    var length:Number = menuArray.length;
    trace(length);

    // dynamic according to number of chambers
    for (var i:Number = 0; i < length; i++) {
     var sublength:Number = menuArray[i].childNodes.length;
     var submenu:Array = new Array();

     // chamber name and link
     var xmlNode:XMLNode = menuArray[i];
     submenu["name"] = xmlNode.attributes.name;
     submenu["link"] = xmlNode.attributes.link;

     // create sub-item for each chamber
     for (var j:Number = 0; j < sublength; j++) {
      var subXmlNode:XMLNode = xmlNode.childNodes[j];

      var item:Array = new Array(subXmlNode.firstChild, subXmlNode.attributes.link);
      submenu.push(item);
     }

     // create an entry for each chamber
     mainmenu.push(submenu);
    }
   }
  }
 }

 function buildMenu():Void {
  //trace(mainmenu);
 }
}

但不幸的是,没有任何东西被加载。

2 个答案:

答案 0 :(得分:1)

我不会在构造函数内部创建函数,而是将加载处理程序作为类的方法,并将menu.onLoad指定为等于该方法。否则我没有看到任何真正的问题,尽管在调用可能触发该处理程序的方法之前我确实倾向于声明任何事件处理程序(即在调用load之前设置onLoad)。您可能还想添加onData以查看是否从加载中获取任何原始数据(onData接收一个参数 - 已加载文件的原始文本)。

答案 1 :(得分:0)

我认为你不是在创建你的主菜单数组。您可以将代码修改为以下内容:

menu = new XML();
menu.ignoreWhite = true;
menu.load(xmlFile);

mainmenu = new Array();//add this