1

URLLoader を使用して、ロードされたファイルのファイル名を取得する方法はありますか?

public function loadCSS():void {
    var urlLoader:URLLoader = new URLLoader();
    urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
    urlLoader.load(new URLRequest("cssFile1"));
    urlLoader.load(new URLRequest("cssFile2"));
    urlLoader.load(new URLRequest("cssFile3"));
}

private function urlLoader_complete(evt:Event):void {

    // *****How can I get the file name here?
    var css:String = URLLoader(evt.currentTarget).data;
    // Do lots of stuff

}
4

2 に答える 2

5

まず第一に、loadメソッドは非同期であるため、コード内のこれら 3 つの呼び出しは互いに連続してオーバーライドされます。イベントがディスパッチされる唯一の呼び出しはCOMPLETE、最後の呼び出しです。ファイルを非同期でロードする場合は、ファイルごとに URLLoader のインスタンスを作成する必要があります。

第二に、(そしてあなたの質問にもっと)最初に呼び出されたにアクセスできるようにするプロパティがURLLoaderクラスにありません。URLRequestload()

これを回避する簡単な方法は、拡張することURLLoaderです。たとえば、URL のみが必要な場合:

public class MyURLLoader extends URLLoader
{
    private var _url:String;

    public function MyURLLoader(request:URLRequest=null)
    {
        super(request);
    }

    override public function load(request:URLRequest):void
    {
        super.load(request);
        _url = request.url;
    }

    public function get url():String
    {
        return _url;
    }
}

次に、コードで単一のイベント ハンドラーを使用できます。

public function loadAllCSS():void {
    loadCSSFile("cssFile1");
    loadCSSFile("cssFile2");
    loadCSSFile("cssFile3");
}

private function loadCSSFile(cssURL:String):void {
    var urlLoader:MyURLLoader = new MyURLLoader();
    urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
    urlLoader.load(new URLRequest(cssURL));
}

private function urlLoader_complete(evt:Event):void {
    var cssURL:String = evt.target.url;  //now I know where this came from
    var css:String = evt.data;
}
于 2011-09-23T20:15:36.993 に答える
1

3 つの URLLoader を作成します。complete 関数では、イベント ターゲットの ID を確認して、どのファイルからイベントを取得しているかを判断できます。これにより、どのファイルがロードされているかがわかります。コードを分解する方法に応じて、代わりに 3 つの異なるハンドラーを使用することもできます。

同じ URLLoader で load を複数回呼び出したときに何が起こるかについて、ドキュメントは明確ではありません。あなたの例では、ドキュメントでは、イベントハンドラーが1回または3回呼び出されるかどうか、および複数回呼び出される場合、データが毎回異なるかどうかを指定していません。

于 2011-09-23T20:13:41.497 に答える