cc.loader.load加载内容在onload时读取不到

var xmlUtil = cc.Class({
// extends: cc.Component,

properties: {
    xmlName:null,
    data:null

},

statics: { 
    instance: null
},

ctor: function () {
    this.xmlName = [// 新表加入时需加入对应表名
        "ExampleData",
        "battle1",
        "battle2", 
        "battle3",
        "battle4",
        "battle5",
        "battle6",
        "battle7",
        "battle8",
    ];
    var index = 0;
    var aLen = this.xmlName.length;
    var xName = this.xmlName;
    var alldata = [];
    var addData = function(){
        if(index<aLen){
            var url = cc.url.raw('resources/'+xName[index]+'.json');
            cc.loader.load( url, function(err, res){
                if(err){
                    cc.log("Error"+err); 
                }else{
                    alldata[xName[index]] = res;
                }                   
                index++;
                addData();
            });
        };
    };
    addData();
    this.data = alldata;
},
getXmlInfo: function (name, id){
    cc.log("----------get data!-----------");
    cc.log(name+"------------")
    var newdata = this.data[name];
    if (newdata == null){
        cc.log("there is no xml named "+name);
        return null;
    } 
      if (newdata[id] == null){
        cc.log("there is no xmlinfo by id "+id+"in "+name)
        return null;
    } 
    return newdata[id];
},

getLen: function(name){
    var Length = 0;
    for(var item in this.data[name]){
        Length++;
    }
    return Length;
},

getAllXmlInfo: function(name){
    var newdata = this.data[name];
    if (newdata == null){
        cc.log("there is no statictable named "+name)
        return null
    }  
    return newdata
}

});

xmlUtil.getInstance = function () {
if (xmlUtil.instance == null) {
xmlUtil.instance = new xmlUtil();
}
return xmlUtil.instance;
};

//调用方法:
//生成的json文件必须放于resources目录下
// 1引入: var xmlUtil = require("…/xml/xmlUtil");
// 2初始化:var xml = xmlUtil.getInstance(); //注意:由于cc.loader.load的异步特性 在加载所有表时会产生延时 所以初始化工作需提前进行
// 3调用:
// var aa = xml.getXmlInfo(“battle1”,1); // 获取表名为"battle1"中id为1的一条数据
// cc.log(“AllXmlInfo:”+AllXmlInfo);
// cc.log(aa.id+"--------------------");
// cc.log(aa.rewardType+"--------------------");
// cc.log(aa.level+"--------------------");
// cc.log(aa.feats+"--------------------");

    // var len = xml.getLen("battle2")       //获取表名为"battle2"的长度
    // cc.log("len:"+len);

    // var AllXmlInfo = xml.getAllXmlInfo("battle3");//获取表名为"battle3"的全部数据

我在项目中有这样一个工具类来对表格数据进行读取加载,但是在初始化时,onload中get不到表内容,会报“there is no xml named”错,我想问一下这个应该怎么处理,好像和cc.loader.load有关。

cc.loader.load 本身是异步的,就算放在 ctor 中也无法保证在 onLoad 的时候已经加载完毕

那应该怎么做cc.loader.load的处理,求大神明示

我在ccclass之前require也获取不到,应该怎么解决?

自己一般都是用 flag 变量标记,加载完才可以继续处理其他逻辑;也可以用事件方式,加载完以后通知监听者处理。