找回密码
 立即注册

QQ登录

只需一步,快速开始

Wilson.Zhang
超级版主   /  发表于:2024-9-30 17:58  /   查看:258  /  回复:0
本帖最后由 AlexZ 于 2024-10-9 14:07 编辑

SpreadJS将图片、形状、区域快照、控件等抽象为ShapeBase类型的各个子类,如图1所示。

image.png111846007.png

图1. ShapeBase子类

通过UI操作时,只需要根据UI界面提示的步骤选择图片、形状类型、控件类型等就可以将对应的元素插入至Worksheet。然而,通过代码添加ShapeBase对象时,根据不同类型选择调用接口,接口名称与类型对应,如图2所示。

image.png349315490.png

图2. 添加形状API

在插入ShapeBase对象时,需要为其设置名称,如果需要访问已经添加至Worksheet的ShapeBase对象,也可以根据其名称获取ShapeBase对象。如果不知道名称呢?那也可以通过如图2中所示的ShapeCollection:all()获取所有ShapeBase对象,逐一遍历访问。如果需要在遍历过程中筛选出指定类型的ShapeBase对象呢?直观猜想ShapeBase对象可能有表示具体类型的属性type,翻阅官网API文档发现父类ShapeBase没有type属性,而各个子类也并非都包含有type属性。因此,基本可以打消通过属性字段获取具体类型信息的想法。那么,还有其他方法吗?有,可以通过instanceof关键字,判断每个ShapeBase对象是否属于某个特定子类的实例。此法质朴且有效,可信可行也可靠。

如图3所示,在Worksheet插入了线条和普通形状,通过右侧浏览器控制台打印信息可以了解。

1. 线条和普通形状都属于ShapeBase类型,这是它们具体类型的共同父类;
2. 线条属于ConnectorShape类型,此外不属于其他类型的对象实例。
3. 普通形状属于Shape类型,此外不属于其他类型的对象实例。

image.png759388427.png

图3. ShapeBase对象具体子类归属

问题原帖:https://gcdn.grapecity.com.cn/showtopic-227316-1-1.html










0 个回复

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