SpreadJS将图片、形状、区域快照、控件等抽象为ShapeBase类型的各个子类,如图1所示。
图1. ShapeBase子类
通过UI操作时,只需要根据UI界面提示的步骤选择图片、形状类型、控件类型等就可以将对应的元素插入至Worksheet。然而,通过代码添加ShapeBase对象时,根据不同类型选择调用接口,接口名称与类型对应,如图2所示。
图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类型,此外不属于其他类型的对象实例。
图3. ShapeBase对象具体子类归属
问题原帖:https://gcdn.grapecity.com.cn/showtopic-227316-1-1.html
|
|