代码之家  ›  专栏  ›  技术社区  ›  Anriëtte Myburgh

flash+as2.0=在构造函数中加载XML文件

  •  0
  • Anriëtte Myburgh  · 技术社区  · 15 年前

    如何使用构造函数加载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 回复  |  直到 15 年前
        1
  •  1
  •   Branden Hall    15 年前

    我不会在构造函数内部创建函数,而是让您的加载处理程序成为类的一个方法,并将menu.onload分配给该方法。否则,我看不到任何实际的问题,尽管我倾向于在调用可能触发该处理程序的方法之前声明任何事件处理程序(即,在调用Load之前安装OnLoad)。您还可能希望添加OnData以查看是否也从加载中获取任何原始数据(OnData接收一个参数-加载文件的原始文本)。

        2
  •  0
  •   tarling    15 年前

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

    menu = new XML();
    menu.ignoreWhite = true;
    menu.load(xmlFile);
    
    mainmenu = new Array();//add this