2012-02-27 79 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

相關問題