1.4.2版本中cc.loader的疑似重大bug

之前我代码里有用到cc.loader的缓存功能,即,通过cc.loader.loadRes(url)成功加载资源之后,再调用cc.loader.getRes(url)是能够获取到由cc.loader缓存的资源的。

但是今天我把creator从1.4.0版本升级到1.4.2版本(今天下午从官网下载的)之后,发现cc.loader.getRes(url)调用会永远返回null,除非我为cc.loader.getRes()显式指定type参数值。根据官方api文档,这个type参数值是可以不指定的(在我的项目里,同一个目录下不会存在同名的不同类型资源,所以我调用cc.loader的接口时都是不带type参数的)。

求引擎组大大帮忙看看是神马情况,万分紧急!拜托!!!

补充:
3天前有同学在论坛提到1.4.1版本就存在该问题,当时@panda回复说在1.4.2版本已修复该问题(1.41版本,cc.loader.getRes失效)。那是该fix还没合入到官网挂的1.4.2正式版中么?

1.4.2 是合并了这个修复的,麻烦看一下你那边应用包内的 engine 目录下对应文件是否是像这个 PR 中的内容一样

https://github.com/cocos-creator/engine/pull/1569/files#diff-7659535d2dc1a0c6020d1dcc69e3721d

看了一下的确没有来得及合并进去,目前建议的解决方案是给 loader polyfill 上正确的实现:

cc.loader.getRes = function (url, type) {
    var item = this._cache[url];
    if (!item) {
        var uuid = this._getResUuid(url, type, true);
        if (uuid) {
            var ref = this._getReferenceKey(uuid);
            item = this._cache[ref];
        }
        else {
            return null;
        }
    }
    if (item && item.alias) {
        item = this._cache[item.alias];
    }
    return (item && item.complete) ? item.content : null;
}

保证这段代码在你执行 getRes 之前被执行即可

好的,非常感谢!

第一次看到的时候没在意,自己用的时候又来查论坛了,用1.4.2版本的同学,看到这个赶快在自己代码里面加上,免得后面又花大量时间查问题