Xml AS3范围问题

Xml AS3范围问题,xml,arrays,actionscript-3,oop,Xml,Arrays,Actionscript 3,Oop,我在flash中创建的类中遇到范围问题。我正在创建一个应用程序,它利用XML创建一组信息,我将对这些信息进行操作并重新保存为XML 我有一个document类,它正在调用另一个类,我正在使用该类加载XML,将其转换为数组,并使用方法将数组返回给文档构造函数。我已经成功解析了XML并创建了一个数据数组,但似乎无法通过loadXMLData类中的processXML函数将数据添加到数组中 我从代码中去掉了所有无关紧要的东西。这是我试图做的基本表现 我的文档类 package { impo

我在flash中创建的类中遇到范围问题。我正在创建一个应用程序,它利用XML创建一组信息,我将对这些信息进行操作并重新保存为XML

我有一个document类,它正在调用另一个类,我正在使用该类加载XML,将其转换为数组,并使用方法将数组返回给文档构造函数。我已经成功解析了XML并创建了一个数据数组,但似乎无法通过loadXMLData类中的processXML函数将数据添加到数组中

我从代码中去掉了所有无关紧要的东西。这是我试图做的基本表现

我的文档类

package  {

    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.utils.*;


    public class dashBoard extends MovieClip {

        public var newData

        //initialize the dashBoard
        public function dashBoard(){

            //construct the Dashboard Object
            trace("Dashboard Initialized");
            trace("|--------------XML Data--------------|");
            newData = new loadXMLData();
            trace(newData.getSections());


        }

    }

}
我的loadXMLData类

 package  {

        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.utils.*;

        public class loadXMLData extends MovieClip {

                //initialize an array that will be used in the document class
                public var sectionList:Array = new Array();

                public function loadXMLData() { 

                    //load the xml file containing the data
                    var myLoader = new URLLoader();
                    myLoader.load(new URLRequest("dashboard.xml"));
                    myLoader.addEventListener(Event.COMPLETE, processXML); 

                function processXML(e:Event):void {

                     //process the xml file after it loads
                             //and create an object
                     var newXML:XML = new XML(e.target.data);

                             //then I use the XML to populate my 
                             //array i declared at the top
                             //this is a simple test
                             sectionList[0] = "test";

                }

            }

                //and this is the method i use in the document class
                //to get the sectionList array
            public function getSections():Array{
                 return sectionList;
                }

        }

    }

这看起来很简单,但我似乎无法编辑数组。document类始终返回一个空白数组。有什么想法吗?

这不是范围问题,您正在构建loadXMLData,然后立即尝试获取sectionList,而不必等待它加载。构造函数调用和对getSections的调用是同步的,但实际的XML文件加载是异步的


理想情况下,loadXMLData对象将从processXML处理程序函数发送一个完整的事件,文档类将侦听该事件(就像loadXMLData侦听加载程序完成一样)

很有可能:
trace(newData.getSections())
在函数processXML之前发生,该函数填充数组。这是因为processXML正在响应Event.COMPLETE,这可能需要几秒钟才能完成


您的文档还应在尝试输出事件之前“侦听”事件(加载程序类应分派该事件)。

您正在尝试访问尚不存在的信息。当XML完成加载后,在
loadXMLData.processXML()函数中分派一个事件,如下所示:

function processXML(e:Event):void
{

    //process the xml file after it loads
    //and create an object
    var newXML:XML = new XML(e.target.data);

    dispatchEvent(new Event("xml_loaded"));

}
然后在你做这样的事情之前先听清楚:

package
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.utils.*;


    public class dashBoard extends MovieClip
    {

        public var newData:loadXMLData;

        //initialize the dashBoard
        public function dashBoard(){

            //construct the Dashboard Object
            trace("Dashboard Initialized");
            newData = new loadXMLData();

            newData.addEventListener("xml_loaded", _xmlLoaded);
        }

        private function _xmlLoaded(e:Event):void
        {
            trace("|--------------XML Data--------------|");
            trace(newData.getSections());
            newData.removeEventListener("xml_loaded", _xmlLoaded);
        }
    }
}

你是最伟大的!谢谢你的帮助。我是面向对象编程的新手,我刚刚开始看到它有多强大。