2011-09-23 5 views
1

URLLoader를 사용하면로드 된 파일의 파일 이름을 가져 오는 방법이 있습니까?URLLoader로드 된 URL을 가져 오는 방법은 무엇입니까?

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 

} 

답변

5

우선, load 메서드는 비동기식이므로 코드에서 세 번 호출하면 서로 오버 라이드 (override)됩니다. 전달되는 COMPLETE 이벤트로 이어질 유일한 호출이 마지막 것입니다. 파일을 비동기 적으로로드하려면 각 파일에 대해 URLLoader의 인스턴스를 만들어야합니다.

둘째로 URLLoader 클래스에는 load()이 처음에 호출 된 URLRequest에 액세스 할 수있는 속성이 없습니다.

간단한 방법은 URLLoader을 확장하는 것입니다. 예, 당신은 단지 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; 
} 
:
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

세 개의 URLLoader를 만듭니다. 전체 기능에서 이벤트 대상의 ID를 확인하여 이벤트를받는 대상을 확인하면로드 된 파일을 알 수 있습니다. 코드를 어떻게 고려 하느냐에 따라 세 가지 다른 핸들러를 사용할 수도 있습니다.

동일한 URLLoader에서 여러 번로드를 호출 할 때 문서가 명확하지 않은데, 이는 (나에게) 잘 정의 된 동작이 아니며이를 피하는 것이 좋습니다. 예를 들어, 설명서에서는 이벤트 핸들러를 한 번 또는 세 번 호출할지 여부와 매번 데이터가 다를지 여부가 여러 번 호출되는지 여부를 지정하지 않습니다.

관련 문제