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

最後の文:何がしなければならないことは、イベントを通じて制御実行され、そしてあなたがprocessXML機能やprocessXMLから呼び出された別の関数である必要があり、ロードされたXMLを使用して実行したいものは何でも行動trace(myXML);)は、XMLがロードされる前に実行されます。これを確認するには、XMLコンテンツをトレースし、その関数を 'processXML'関数**から呼び出す別の関数を作成した後** XMLを作成します。 – package

+0

うん、それは働いた! 'function processXML(e:Event):void { \t myXML = new XML(e.target.data); \t myXMLtrace(); } function myXMLtrace(){ \t trace(myXML。*); } ' – user1203605

+0

おかげでShanethehat! – user1203605

答えて

1

ActionScriptは非同期であるため、実行フローをコードで制御することはできません配置。 `(

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

0

あなたが別の関数

private var myXML:XML; 
+0

それは私がやったことではありませんか? (マイナスプライベート) – user1203605

+0

最初の4行のコードはクラスのpublic関数で宣言されていますが、複数の関数で使用したくない変数を宣言する必要があります。 –

+0

試してみましたが変更はありません。新しいFLAファイルを作成し、このコードに貼り付けましたが、変更はありません。 – user1203605

0

ActionScriptでそれを使用できるようにするために、あなたの関数の外にあなたのXML変数を宣言する必要があることはトレースを意味し、非同期の言語である「外」のコールバックは次のようになりますファイルがロードされる前に呼び出されます。あなたのケースでの実行順序は次のとおりです。

  1. URLLoaderクラスのインスタンスを作成
  2. 開始ロードファイル
  3. 完全なイベントににMyXML
  4. (またはいくつかの点での
  5. トレースを聞くためにイベントリスナーを追加後で)XMLファイルの読み込みを終了する
+0

processXMLは、XMLファイルがロードされた後にのみ起動する必要があります。そのため、内部で動作します。したがって、この場合、関数の値をどのように得ることができますか? – user1203605

+0

値の設定はそのままですが、XMLファイルがロードされた後でのみ有効になり、実行がトレースメソッドに到達したときには使用できなくなります。 processXML関数が呼び出されるまで、myXML変数を使用しないようにする必要があります。 –

関連する問題