質問

コンストラクタを使用して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);
 }
}

しかし、残念ながら、何もロードされません。

役に立ちましたか?

解決

コンストラクター内で関数を作成するのではなく、ロードハンドラーをクラスのメソッドにして、そのメソッドに等しいmenu.onLoadを割り当てます。そうでなければ、実際の問題は見られませんが、そのハンドラーをトリガーできるメソッドを呼び出す前にイベントハンドラーを宣言する傾向があります(つまり、loadを呼び出す前にonLoadをセットアップします)。また、onDataを追加して、ロードから生データを取得しているかどうかを確認することもできます(onDataは1つの引数-ロードされたファイルの生テキストを受け取ります)。

他のヒント

メインメニュー配列を作成しているとは思わない。コードを次のように修正できます。

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

mainmenu = new Array();//add this
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top