Egret社区

[Egret Engine] 根据类名去获得类 获得的类不对

2016-8-12 17:32
514628
产品 Egret Engine 版本 3.0.8;3.1.3
复现概率 100% 平台 Android 5.1.1
复现步骤 一个基类Base,一个继承Base的BaseUI类,一个继承BaseUI的Logic逻辑类
一个含有切换场景的changeScene静态方法的Scene类,
以及一个根据disClass获取对应类实例的静态方法getView(disClass) {
var view = new disClass();
return view;
}

changeScene(disClass) {
var view = this.getView(disClass);
egret.log(egret.getQualifiedClassName(view));
}
当先changScene(LoadingUI)切换到一个loading类,效果达到没问题,但是当loading加载完后,再changeScene(Page)到另一个Page类时,问题发生了。
这里changeScene的egret.log在PC的chrome测试下打印完全正常,
但是一经发布之后,在微信web开发者工具上以及安卓手机上打印的都不正常,切换到Page类的时候egret.log打印的是LoadingUI

LoadingUI和Page的父类的父类是Base,父类是各自的UI界面
问题描述 根据类名去获得类 获得的类不对
错误代码 getView(disClass) {
var view = new disClass();
return view;
}

changeScene(disClass) {
var view = this.getView(disClass);
egret.log(egret.getQualifiedClassName(view));
}
BUG截图
本帖最后由 aknight 于 2016-8-12 18:12 编辑

一个基类Base,一个继承Base的BaseUI类,一个继承BaseUI的Logic逻辑类
一个含有切换场景的changeScene静态方法的Scene类,
以及一个根据disClass获取对应类实例的静态方法getView(disClass) {
  var view = new disClass();
  return view;
}

changeScene(disClass) {
    var view = this.getView(disClass);
    egret.log(egret.getQualifiedClassName(view));
}
当先changScene(LoadingUI)切换到一个loading类,效果达到没问题,但是当loading加载完后,再changeScene(Page)到另一个Page类时,问题发生了。
这里changeScene的egret.log在PC的chrome测试下打印完全正常,
但是一经发布之后,在微信web开发者工具上以及安卓手机上打印的都不正常,切换到Page类的时候egret.log打印的是LoadingUI

LoadingUI和Page的父类的父类是Base,父类是各自的UI界面


最后通过egret.getDefinitionByName通过传字符串去获得类限定名 然后new出来 结果就正常了

filehelper_1470993973585_1.png

filehelper_1470993997842_82.png

filehelper_1470994019614_57.png

filehelper_1470994051729_38.png

filehelper_1470994100289_21.png
可以看到最后打印的两个都是LoadingUI
eeg3.0.3.rar (409.29 KB, 下载次数: 2)
分享到 :
0 人收藏
如果不是为了山顶,我又何须踏土碾泥

28 个回复

正序浏览
yjtx  官方团队 | 2016-8-15 11:17:09
aknight 发表于 2016-8-15 11:03
好吧,我知道了。 我还有个疑问,就是为啥本地可以 发布之后就不行了呢  ...

和压缩的方式有关,你对比下生成的js构造函数就知道了
aknight  炉火纯青 | 2016-8-15 11:03:16
yjtx 发表于 2016-8-15 10:50
egret.log(egret.getQualifiedClassName(view));  这句传 disClass 就是了。

好吧,我知道了。 我还有个疑问,就是为啥本地可以 发布之后就不行了呢
yjtx  官方团队 | 2016-8-15 10:50:38
aknight 发表于 2016-8-15 10:39
哦哦,那怎么根据类定义获取类名呢

egret.log(egret.getQualifiedClassName(view));  这句传 disClass 就是了。
aknight  炉火纯青 | 2016-8-15 10:39:39
yjtx 发表于 2016-8-15 09:57
传字符串也是可以的,或者直接根据类定义获取类名传,总之不能直接将类定义作为key使用 ...

哦哦,那怎么根据类定义获取类名呢
yjtx  官方团队 | 2016-8-15 09:57:06
aknight 发表于 2016-8-15 09:42
那要怎么才能达到这个效果呢

传字符串也是可以的,或者直接根据类定义获取类名传,总之不能直接将类定义作为key使用
aknight  炉火纯青 | 2016-8-15 09:42:36
yjtx 发表于 2016-8-15 09:20
page = this.panels[disClass];  问题出现在这句,js 里是无法将 Object 作为 Array 的 key。这句在 publ ...

而且为什么本地可以 一发布到线上就不行了
aknight  炉火纯青 | 2016-8-15 09:42:02
yjtx 发表于 2016-8-15 09:20
page = this.panels[disClass];  问题出现在这句,js 里是无法将 Object 作为 Array 的 key。这句在 publ ...

那要怎么才能达到这个效果呢
yjtx  官方团队 | 2016-8-15 09:20:19
aknight 发表于 2016-8-12 20:44
不好意思 ,卡着了

page = this.panels[disClass];  问题出现在这句,js 里是无法将 Object 作为 Array 的 key。这句在 publish 的时候会导致获取到的是一个函数。
aknight  炉火纯青 | 2016-8-12 20:44:37
yjtx 发表于 2016-8-12 20:01
我这边看到的是2 不同的类啊,我看代码也刚好是这2个呀

不好意思 ,卡着了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

返回顶部