Egret社区
请问如何让皮肤在实体化时,实体化的是我自己定义的类
举个例子:
我有个皮肤 com_skin 放到了 另一个皮肤 main_skin里面
我定义了一个Main.ts(里面有this.skinName = "main_skin") 和 com.ts
如何在实体化 Main中时,com_skin 不是实体化一个 eui.commponet 而是我这个com
分享到 :
0 人收藏

5 个回复

倒序浏览
app小王子  社区管理员 | 2020-6-23 10:09:44
把com类中设置 this.skinName = "com_skin"即可。
IAMZCY  圆转纯熟 | 2020-6-23 11:38:54
可以先创建自定义类,然后放到皮肤中,然后设置组件的皮肤
将com组件放到main_skin里面,
在main_skin皮肤里设置com组件的皮肤为com_skin
一只小菜鸡  登堂入室 | 2020-6-23 17:30:37
app小王子 发表于 2020-6-23 10:09
把com类中设置 this.skinName = "com_skin"即可。

如果单纯设置com_skin ,在实体化Main的时候并不会去实体化com,因为,xml中决定了实体化的对象是哪个
例如一个简单的按钮,前面的命名空间以及本地名字决定了需要实体化的对象<e:Button id="btn_share" skinName="skins.ButtonSkin"/>
e:Button 所以这个皮肤实体化的是eui.Button
那如何让皮肤实体化出自定义的组件类
参考文档 EXML
(进阶技巧中的自定义组件)

先在皮肤头新增一个命名空间 (我试了一下文档的con="game.*",发现无法对应上组件)
后边发现命名空间的规则变了 改为xmlns:con="game.*" (con 表示下边的命名空间格式 同上边e:Button中的e一样,命名规则不重复即可)
                                                                                   (game为实际的包的命名空间,如果没有命名空间 直接填*即可)
然后下边的组件应用
<con:ExtendsCom id="c_extend" y="0" skinName="extendBtn" left="-115"/>
con为上边的命名空间,ExtendsCom为你的逻辑实现类
自此,当我实体化一个Main时,会自动实体化ExtendsCom

一只小菜鸡  登堂入室 | 2020-6-28 11:29:56
IAMZCY 发表于 2020-6-23 11:38
可以先创建自定义类,然后放到皮肤中,然后设置组件的皮肤
将com组件放到main_skin里面,
在main_skin皮肤 ...

嗯,确实可以,
一只小菜鸡  登堂入室 | 2020-6-28 11:51:31
顺便将之前用的方法也说一下。
之前是重写了setSkinPart 方法即在组件创建好之后,在用新的类与旧的进行替换

例:
皮肤:main_skin,com_skin(main_skin中有用到com_skin)
类:Class Main 和 Com (Main 中对应皮肤main_skin,Com对应皮肤com_skin)
在创建Main后在childrenCreated后 调用this.setSkinPart("c_com",new Com());(c_com即对应com_skin的id)
然后在setSkinPart中将原本的类替换成自己自定义的类
总结:自定义组件实现方法
           一:eui中进阶技巧,自定义组件,(直接在皮肤中让其初始化时即初始化你定义的类)
           二:重写setSkinPart方法在父类创建完之后,再将里面原本的类与自定义的类进行替换
方法一:在创建时仅会创建你自定义的类,但是会在解析时,会先创建一次你自定义的类(初始化的时候会先创建一次)
方法二:因为初始化时还是用的基础类,所以在解析的时候不需要去创建,但是每次创建时会创建一个原本的类,以及你要自定义的类


最后附上重写的setSkinPart

BasePanel.rar

1018 Bytes, 下载次数: 0, 下载积分: 银子 -1

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

一只小菜鸡

登堂入室

积分: 25 帖子: 17 精华: 0

楼主热帖

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

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

返回顶部