Flex4中的皮肤(1): 自定义SkinnableComponent
Flex4提供了一组Spark组件,实现了全新的组件皮肤自定义(Gumbo Skinning ),从而将组件灯显示和功能逻辑完全分离。
本文以PetriNet 中的节点为例,展现Flex4为编程带来的便利。
PetriNet中的节点
下图是一个PetriNet的示例。在PetriNet中有两种节点:库所(Place)和变迁(Transition)。库所和变迁都可以容纳令牌 (Token)。如果一个变迁的每个输入库所 (input place)都拥有令牌,该变迁即为被允许(enable) 。
在Flex3中,我们要实现这两种节点,通常会采取继承的方式:
众所周知继承和类膨胀会带来一些问题,如果仅仅因为显示的不同而实现两个不同的组件类并不是一个很好的解决办法。
在Flex4中,我们完全可以只定义一个组件类来实现功能逻辑,而把显示交给Skin去处理:
显示和逻辑分离
spark组件都继承自SkinnableComponent,而SkinnableComponent继承子UIComponent并扩展了Skin相关的功能;同样Skin类也继承自UIComponent。
通过这样的方式,spark组件在原有的组件架构基础上,实现了显示和逻辑的分离。
构建自定义的SkinnableComponent和Skin
直接继承SkinnableComponent就可以实现一个自定义的组件:
Node.as
使用SkinnableComponent时,必须定义skinClass样式,否则会发生错误。skinClass的定义如下:
所以在使用自定义组件之前,还要先定义Skin类。这里定义了两个皮肤:
PlaceSkin.mxml
TransitionSkin.mxml
其中的s:Ellipse, s:Rect等元素来自Flex4中的FXG 。
有了Skin后,就可以使用SkinnableComponent组件了:
NodeSample.mxml
运行效果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架