我有一个应用于xml加载的事件监听器,它当前跟踪它抓取的值,这很好,但我想要它做的是返回一个数组供我使用。我有数组创建并从“LoadXML”返回工作(它返回数组)但我无法使用事件监听器。
事件监听器运行“LoadXML”函数很好,但我不知道如何使用返回的数组,这是我的事件监听器现在如何工作的一个例子:
xmlLoader.addEventListener(Event.COMPLETE, LoadXML());
以及我对如何使用数组的假设(这不起作用):
var rArray:Array = xmlLoader.addEventListener(Event.COMPLETE, LoadXML());
所以我尝试了以下内容:
xmlLoader.addEventListener(Event.COMPLETE, function():Array{
var rData:Array = LoadXML(datahere);
return rData;
}
但这也不值得。
那么:我如何从eventlistener返回一个数组?谢谢!
答案 0 :(得分:2)
我认为事件监听器的工作原理存在一些混淆。实际上,我很惊讶你的当前代码没有编译错误。
添加事件侦听器时,您应该传入的内容是对稍后要调用的函数的引用。然后,当调用该函数时,它将传递一个Event
对象,其中包含任何已恢复的数据以供使用。这是一个例子:
xmlLoader.addEventListener(Event.COMPLETE, handleLoadComplete/*Note: No brackets, this is a reference*/);
//will be called at a later time, not instantly.
function handleLoadComplete(e:Event):void {
var xml:XML = xmlLoader.data as XML;
//do what ever you want this the XML...
}
希望这能让你更清楚。
快乐的编码!
答案 1 :(得分:1)
为什么不使用组件级对象并设置其值(LoadXML()
方法中的xml内容)?
var rArray:Array;
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
private function LoadXML(event:Event=null):void {
// set this.rArray in here...
}
答案 2 :(得分:0)
有可能使得returnedArray包含一个由convertXML创建的数组,但不是你尝试这样做的方式。 Flash根本不起作用。
这大致是从pastebin运行代码时发生的事情:
var returnedArray:Array = loadinformation("http://website.com/xml.xml");
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest(xmlurl));
function LoadXML(e:Event):void {...}
要获取转换后的数组数据,您需要执行类似clownbaby的答案:在LoadXML内部直接设置returnedArray的值。
var returnedArray:Array;
loadinformation("http://website.com/xml.xml");
function loadinformation(xmlurl:String):Array{
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest(xmlurl));
}
function LoadXML(e:Event):void {
xmlData = new XML(e.target.data);
returnedArray = convertXML(xmlData);
}
function convertXML(xml):Array{
// Does some stuff with the XML and returns an array
return rArray;
}