我在flash中创建的类中存在问题。我正在创建一个应用程序,它利用XML创建一个我将操作并重新保存到XML的信息数组。
我有一个文档类,它调用另一个用于加载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;
}
}
}
看起来很简单,但我似乎无法编辑数组。文档类始终返回一个空数组。任何想法?
答案 0 :(得分:1)
这条线非常有可能:
trace(newData.getSections());
在函数processXML之前发生,这是填充数组的内容。这是因为processXML响应了Event.COMPLETE,可能需要几秒钟才能完成。
在尝试输出事件之前,您的文档还应该“监听”事件(您的加载程序类应该调度)。
答案 1 :(得分:1)
您正在尝试访问尚不存在的信息。在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);
}
}
}
答案 2 :(得分:0)
这不是范围问题,您正在构建loadXMLData,然后立即尝试获取sectionList,而不等待它加载。构造函数调用和对getSections的调用是同步的,但实际的XML文件加载是异步的。
理想情况下,您的loadXMLData对象将从您的文档类侦听的processXML处理函数调度COMPLETE事件(就像您的loadXMLData侦听Loader完成一样)