クラスで行ったことはほとんどありますが、修正が必要なことがいくつかあります。
まず、クラス減速のトップレベル内では、メンバー(プロパティとメソッド)のみを定義できます。現時点では、これはすばらしいことですが、このスコープでも実際のコードを実行しようとしています。
myLoader.load(new URLRequest("http://myWebsite/myFile.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
これはスローしてエラーになり、クラスは機能しなくなります。クラスのインスタンスが作成されたときにすぐにコードを実行するにはconstructor
、で宣言されているクラスと同じ名前を使用する関数であるを使用する必要があります(これは大文字と小文字が区別されます)。これをコードに変換すると、次のようになります。コンストラクターを作成し、その中に犯人コードを配置したことに気付くでしょう。
public class XMLLoad
{
public var myXML:XML;
public var myLoader:URLLoader = new URLLoader();
// This is the constructor.
public function XMLLoad()
{
myLoader.load(new URLRequest("http://myWebsite/myFile.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
}
public function processXML(e:Event):void
{
myXML = new XML(e.target.data);
trace(myXML);
}
}
これで、クラスが作成されますXMLLoad
。キーワードを使用すると、そのクラスのインスタンスnew
を作成できます。あなたの場合、次のように、必要なことを実行するために必要なインスタンスは1つだけです。
var xmlLoad:XMLLoad = new XMLLoad();
これにより、のインスタンスが作成されXMLLoad
、変数に割り当てられます。これxmlLoad
により、そのクラスで定義したプロパティとメソッドにアクセスできるようになります。上で作成したコンストラクターも自動的に実行されます。つまり、クラスは既にXMLのリクエストを開始しています。
残念ながら、外部データのリクエストは非同期であるため(つまり、アプリケーションの自然なフローとは異なるタイムラインで実行されるため)、XMLが完全に読み込まれたかどうかを判断できず、外部から使用できます。クラス。しかし、私たちにできることは、XMLLoad
クラスを少し変更して私たちを助けることです。
public class XMLLoad
{
public var myXML:XML;
public var myLoader:URLLoader = new URLLoader();
private var _callback:Function;
public function XMLLoad(callback:Function)
{
_callback = callback;
myLoader.load(new URLRequest("http://myWebsite/myFile.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
}
public function processXML(e:Event):void
{
myXML = new XML(e.target.data);
_callback(myXML);
}
}
ここで行ったことは、関数への参照を受け入れるようにコンストラクターを変更することです。関数は、型の引数を受け入れる必要がありますXML
。次にprocessXML
、コールバックを実行し、受信したXMLを送信するように関数を変更しました。これは、これを実行できることを意味します。
var xmlLoad:XMLLoad = new XMLLoad(done);
function done(xml:XML):void
{
trace(xml);
}
これは、関数内でアプリケーションを続行できることを意味します。これdone
により、完全にロードされたXMLを使用できるようになります。