six*_*ude 1 urlloader actionscript-3
无论如何使用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
}
Run Code Online (Sandbox Code Playgroud)
首先,由于该load方法是异步的,因此代码中的这三个调用将相继覆盖彼此.导致COMPLETE事件被发送的唯一呼叫将是最后一次.如果要异步加载文件,则需要为每个文件创建一个URLLoader实例.
二,(多到你的问题)中有没有属性的URLLoader类,允许您访问URLRequest的是一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中,您仍然可以使用单个事件处理程序:
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;
}
Run Code Online (Sandbox Code Playgroud)