AS3。使用Loader Complete Event返回一个值

时间:2013-06-15 21:59:37

标签: actionscript-3 loader urlloader

我想创建一些函数,返回加载对象。 类似的东西:

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

但是无法理解,当加载完成时,如何返回加载的值。 因为它将是另一个功能..

请帮助,如果有人知道,如何:)

对不起我的英文,

1 个答案:

答案 0 :(得分:0)

您可以创建一个自定义加载器,并为其设置一个回调函数,当加载器加载完成后,将执行回调。这是一个简单的例子

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
  }


}