Egret社区

关于异步加载是的 this

2014-9-3 15:11
14622
本帖最后由 guoshaorui 于 2014-9-3 16:53 编辑

我要写一个Bulkloader类,用来专门负责加载。
但是当我异步加载的时候,问题出现了。这时的this指向了Window。刚开始接触Egret,有什么错误请指正。

调用代码:
var bulkloader:BulkLoader=new BulkLoader();
           bulkloader.addItem("resource/assets/01.jpg",BulkLoader.BLOADER_TYPE_TEXTURE);
           bulkloader.addItem("resource/config/mc_json.json",BulkLoader.BLOADER_TYPE_TEXT);
           bulkloader.start();
Bulkloader类:
class BulkLoader{
    private loader:egret.URLLoader;
    private list:Array=new Array();
    private isstart:Boolean=false;


    public static BLOADER_TYPE_BYTE:String="byte";
    public static BLOADER_TYPE_TEXT:String="text";
    public static BLOADER_TYPE_VARIABLES = "variables";
    public static BLOADER_TYPE_TEXTURE = "texture";
    public static BLOADER_TYPE_SOUND = "sound";
    public constructor(){

    }
    public addItem(url:String,type:String):void{
         var obj:Object=new Object();
         obj.url=url;
         obj.type=type;
         this.list.push(obj);
    }
    public addItemNow(url:String,type:String):void{
        var obj:Object=new Object();
        obj.url=url;
        obj.type=type;
        this.list.unshift(obj);
    }
    public start():void{
        if(!this.isstart&&this.list.length>0){
            this.next();
        }

    }
    public stop():void{
        this.isstart=false;
    }
    public next():void{
        if(this.list.length>0){
            console.log(this);
            console.log(this.next);
            this.isstart=true;
            var req:Object=this.list.shift();
            var loader:egret.URLLoader=new egret.URLLoader();
            var urlreq:egret.URLRequest=new egret.URLRequest();
            urlreq.url=req.url;
            loader.load(urlreq);
            loader.addEventListener(egret.Event.COMPLETE,this.handler);

        }
    }
    public handler(e:egret.Event):void{
        console.log(e);
        this.isstart=false;
        /**
         *
         * 最终问题出现在这里 this 指向了Window
         *
         */
        console.log(this);
        console.log(this.next);
        this.next();

    }
}

分享到 :
0 人收藏

2 个回复

倒序浏览
张宇  官方团队 | 2014-9-3 15:29:39
loader.addEventListener(egret.Event.COMPLETE,this.handler)
这个最后要加上this
loader.addEventListener(egret.Event.COMPLETE,this.handler,this);
netwindsky  初学乍练 | 2014-9-3 16:06:37
非常感谢~! 刚转过来 总是忘记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

netwindsky

初学乍练

积分: 7 帖子: 7 精华: 0

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部