AS3如何声明全局变量?

时间:2012-02-28 10:29:20

标签: xml actionscript-3

我正在尝试从一个URLLoader COMPLETE事件的函数中获取一个值,但即使在函数外部声明变量也不允许我获取该值。我被卡住了。

似乎Flash的异步性质使得无法获得价值:例如这有效:

// Initialise a URLLoader to get XML data from XML file
var myFPBLoader:URLLoader = new URLLoader();
myFPBLoader.load(new URLRequest("flightPlannerBoard.xml"));


// Check XML data fully loaded
myFPBLoader.addEventListener(Event.COMPLETE, processFPBxml);

var myXML:XML = new XML();// Declared **outside** function

function processFPBxml(e:Event):void {
this.myXML = XML(e.target.data);
trace("yep" + myXML); // This works
myTraceXML();
 }

function myTraceXML(){
 trace("more tests:" + myXML); // **This trace works**
}

trace("more tests:" + myXML); // This **doesn't** work

如何随时随地获得可以使用的价值?

2 个答案:

答案 0 :(得分:2)

以下是您的代码中发生的事情:

  1. 函数processFPBxml()myTraceXML()以及变量myFBPLoadermyXML已声明。
  2. XML开始加载myFPBLoader.load此时代码不会停止。加载是异步调用,其余代码正在立即执行
  3. 跟踪一个空XML trace("more tests:" + myXML); // This **doesn't** work
  4. 加载XML并调度Event.COMPLETE
  5. 分配给前述事件的EventHandler调用响应:processFPBxml()。此时,myXML被分配给下载的数据。
  6. myTraceXML()被召唤。
  7. 现在,如果要在加载XML后继续执行代码,则必须将代码划分为单独的函数,这些函数可以生成特定任务,并在从XML获取数据后调用这些函数。在这种情况下,您可以将myTraceXML()重命名为init()或任何对您有意义的内容并编写程序的其余部分(在此特定函数中不需要。使用它作为起点)。

答案 1 :(得分:0)

如您所述,通过URLLoader请求的数据是异步获取的。

这意味着在Flash收到之后,之后的数据无法访问。你想做的事情是不合逻辑的,无法完成。

如果可能,为什么Web应用程序在查找要显示的信息时会加载符号等?