2012-02-27 34 views
0

尽管在外部声明,但似乎无法在函数外部获取myXML的值。我在这里错过了什么?数据在函数内正确加载和跟踪。AS3在另一个函数中使用变量 - 不工作

var myLoader:URLLoader = new URLLoader(); 
myLoader.load(new URLRequest("flightPlannerBoard.xml")); 

var myXML:XML; 

// Check XML data fully loaded 
myLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void { 

myXML = new XML(e.target.data); 
//trace(myXML); 
} 
trace(myXML); 
+0

最后一条语句(' trace(myXML);')在加载XML之前执行。为了证实这一点,在创建XML之后,创建另一个跟踪XML内容的函数,并从'processXML'函数**中调用该函数。 – package 2012-02-27 09:05:31

+0

是的,那工作! 'function processXML(e:Event):void { \t myXML = new XML(e.target.data); \t myXMLtrace(); } function myXMLtrace(){ \t trace(myXML。*); }' – user1203605 2012-02-27 09:17:46

+0

谢谢Shanethehat! – user1203605 2012-02-27 09:19:11

回答

1

由于ActionScript与其他人说的一样异步,因此无法通过代码控制执行流放置。你必须做什么是控制执行过的事件,所以要与加载XML执行应在processXML功能或者是从的processXML称为另一个函数的任何动作:

var myXML:XML; 

function processXML(e:Event):void { 
    myXML = new XML(e.target.data); 
    trace(myXML); //this trace will work 
    doNextAction(); 
} 

function doNextAction():void { 
    trace(myXML); //this trace will also work 
} 
+0

感谢您的帮助,在学习AS3时很好的了解其他内容。 – user1203605 2012-02-27 09:21:42

0

你应该声明你的XML变量的功能之外,为了能够在另一个函数

private var myXML:XML; 
+0

是不是我所做的? (减去私有的) – user1203605 2012-02-27 09:06:00

+0

我想前四行代码是在你的类的公共函数中声明的,上面你应该声明你想在多个函数中使用的变量 – 2012-02-27 09:07:51

+0

试过但没有改变。创建一个新的FLA文件并粘贴在这个代码中,但没有改变。 – user1203605 2012-02-27 09:13:03

0

ActionScript来使用它是一个异步的语言,意思是跟踪“外部”的回调将是在文件加载之前调用。在你的情况下,执行顺序是:

  1. 创建的URLLoader实例
  2. 开始加载文件
  3. 添加事件侦听器收听完整的事件
  4. 描绘出myXML
  5. (或在某一时刻稍后)完成加载xml文件
+0

processXML应该只在加载XML文件时触发 - 这就是为什么它在里面工作。那么,在这种情况下,我如何才能从函数中获取值? – user1203605 2012-02-27 09:07:32

+0

值的设置应该没问题,但只有在加载XML文件后才可用,而不是在执行达到跟踪方法时可用。您需要确保在调用processXML函数之前不要尝试使用myXML变量。 – 2012-02-27 09:15:39

相关问题