Flash + AS2.0 = загрузить XML-файл в конструктор - PullRequest
0 голосов
/ 16 сентября 2009

Как вы загружаете 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 ]

1 голос
/ 16 сентября 2009

Вместо того, чтобы создавать функцию внутри конструктора, я бы сделал ваш обработчик нагрузки методом вашего класса и просто назначил menu.onLoad равным этому методу. В противном случае я не вижу каких-либо реальных проблем, хотя я склонен объявлять любые обработчики событий перед тем, как вызвать метод, который может вызвать этот обработчик (т.е. настроить onLoad до вызова load). Вы также можете добавить onData, чтобы узнать, получаете ли вы какие-либо необработанные данные от загрузки (onData получает один аргумент - необработанный текст загруженного файла).

0 голосов
/ 13 ноября 2009

Я не думаю, что вы создаете массив mainmenu. Вы можете изменить код на следующее:

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

mainmenu = new Array();//add this
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...