AS3. Вернуть значение с событием завершения загрузчика

Я хочу сделать какую-то функцию с возвращением загружаемого объекта. Что-то вроде:

   var myVar:String;
   myVar = MyFuncs.GetResponse("http://www....");

А функция GetResponse должна возвращать какое-то строковое значение, например текст в формате json. Я пытаюсь .. Но не понимаю.

  public function GetResponse(url:String):String{
     var request:URLRequest = new URLRequest(url);
     var loader:URLLoader = new URLLoader();             
     loader.load(request);  
     return loader.data
  }

Но данные еще не загружены, когда я возвращаю значение. Я понимаю, мне нужно добавить слушателя, когда загрузчик завершен:

loader.addEventListener(Event.COMPLETE, Complete);

Но не могу понять, как мне вернуть загруженное значение, когда загрузка завершена. Потому что это будет другая функция ..

Пожалуйста, помогите, если кто знает как :)

Простите за мой английский, пожалуйста.


person dmitryhryppa    schedule 15.06.2013    source источник


Ответы (1)


Вы можете создать собственный загрузчик и установить для него функцию обратного вызова, когда загрузка загрузчика завершится, обратный вызов будет выполнен. Вот простой пример

public class MyLoader extends Loader
{

    public function MyLoader($callBack:Function = null)
    {
        super();

        callBack = $callBack; 

        this.contentLoaderInfo.addEventListener(Event.COMPLETE, Complete);
    }

    private var callBack:Function;

    private var _url:String;

    public function set url(value:String):void {

        if (_url != value) {
            _url = value;
            var request:URLRequest = new URLRequest(_url);
            this.load(request); 
        }
    }

    protected function Complete(event:Event):void {
        var target:Object = event.target;

        if (callBack) {
            callBack.apply(null, [target]);
        }
    }

И вы можете использовать это так в классе A

public function class A {

   public function test():void {

       var loader:MyLoader = new MyLoader(setData);
       loader.url = "assets/pig.jpg";//you asset url
   }

  private function setData(obj:Object):void {
     //the obj type is LoadInfo
  }


}
person Pan    schedule 16.06.2013