URLLoader如何获取已加载的URL?

时间:2011-09-23 18:08:27

标签: actionscript-3 urlloader

使用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

}

2 个答案:

答案 0 :(得分:5)

首先,由于load方法是异步的,因此代码中的这三个调用将相继覆盖。导致COMPLETE事件被调度的唯一调用将是最后一个调用。如果要异步加载文件,则需要为每个文件创建一个URLLoader实例。

其次,(以及更多问题)URLLoader课程中没有允许您访问最初调用URLRequest的{​​{1}}的属性。

解决这个问题的一个简单方法是扩展load()。例如,如果您只需要网址:

URLLoader

然后在您的代码中,您仍然可以使用单个事件处理程序:

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;
    }
}

答案 1 :(得分:1)

创建三个URLLoader。在完整的函数中,您可以检查事件目标的标识,以确定您从哪个获取事件,这将告诉您加载了哪个文件。您也可以使用三种不同的处理程序,具体取决于您希望如何计算代码。

当你在同一个URLLoader上多次调用load时,文档并不清楚,对我来说这意味着它没有明确定义的行为,你应该避免它。对于您的示例,文档未指定您的事件处理程序是一次还是三次调用,以及是否多次调用它是否每次都是不同的数据。