找回密码
 立即注册

QQ登录

只需一步,快速开始

wangyue1

金牌服务用户

28

主题

61

帖子

197

积分

金牌服务用户

积分
197

微信认证勋章

wangyue1
金牌服务用户   /  发表于:2020-5-19 10:46  /   查看:5411  /  回复:7
10金币
本帖最后由 wangyue1 于 2020-5-19 10:47 编辑

通过 spread.commandManager().addListener('anyscListener') 无法监听到添加工作表、删除工作表事件。

通过 spread.commandManager().register 来注册自定义指令,删除工作表指令依然无法被监听到。

最佳答案

查看完整内容

右键删除或增加表单的时候会触发一个命令,命令的名字是:gc.spread.contextMenu.deleteSheet,gc.spread.contextMenu.insertSheet 可以根据这个来监听是否删除/增加 了表单 点击加号新增sheet可以通过命中测试来判断: https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/workbook/hit-testing/purejs

7 个回复

倒序浏览
最佳答案
最佳答案
Fiooona
论坛元老   /  发表于:2020-5-19 10:46:14
来自 2#
右键删除或增加表单的时候会触发一个命令,命令的名字是:gc.spread.contextMenu.deleteSheet,gc.spread.contextMenu.insertSheet
可以根据这个来监听是否删除/增加 了表单
  1.        spread.commandManager().addListener("anyscLicenser",function(){
  2. for(var i=0;i<arguments.length;i++){
  3.     var cmd = arguments[i].command;
  4.     console.log(cmd) // gc.spread.contextMenu.deleteSheet
  5. }
  6. });
复制代码

点击加号新增sheet可以通过命中测试来判断:
image.png147617491.png
https://demo.grapecity.com.cn/sp ... /hit-testing/purejs
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
wangyue1
金牌服务用户   /  发表于:2020-5-20 17:24:21
3#
Fiooona 发表于 2020-5-19 12:31
右键删除或增加表单的时候会触发一个命令,命令的名字是:gc.spread.contextMenu.deleteSheet,gc.spread.co ...

由于新增sheet  +号位置会变动   通过hitTest得到的result不准确,链接中的demo同样有这个问题
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-5-20 18:36:02
4#
您好,这个按钮本身确实没办法添加事件,可以考虑把添加sheet的逻辑放到外部按钮上,用addSheet接口实现。或者浮动一个div在+这个位置,参考附件示例。

Corner 禁止点击事件.html

1.5 KB, 下载次数: 212

回复 使用道具 举报
wangyue1
金牌服务用户   /  发表于:2020-5-23 14:23:20
5#
KevinChen 发表于 2020-5-20 18:36
您好,这个按钮本身确实没办法添加事件,可以考虑把添加sheet的逻辑放到外部按钮上,用addSheet接口实现。 ...

+ 的位置是会变的,如何获取+的实时位置呢?
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-5-25 09:47:29
6#
您好,SpreadJS有两个方法可以获取到viewPort区域,也就是表格区域的宽高:

https://demo.grapecity.com.cn/sp ... ViewportHeight.html

https://demo.grapecity.com.cn/sp ... tViewportWidth.html

另外,sheet标签页区域和滚动条区域的宽度比也可以通过这个属性获取和设置:

spread.options.tabStripRatio

这样可以给出计算 + 位置的一些参考。

+++++++++++++++++++++++++++++++++

我提供另一种方案您参考一下:

1、缓存当前表单名称 + 数量的数组,用spread.sheets可以获取当前workbook所有表单对象。

2、注册ActiveSheetChanged事件:
https://demo.grapecity.com.cn/sp ... heetChanged_EV.html

3、事件中对比spread.sheets和缓存数组的差异,如果发生新增了sheet,触发执行您的行为逻辑。
回复 使用道具 举报
wangyue1
金牌服务用户   /  发表于:2020-5-25 10:15:23
7#
KevinChen 发表于 2020-5-25 09:47
您好,SpreadJS有两个方法可以获取到viewPort区域,也就是表格区域的宽高:

https://demo.grapecity.com ...

这个已经解决了。

使用click事件 + hitTest得到的结果不准确,是因为spread本身的操作是绑定的mousedown事件,click事件执行在mousedown之后,所以hitTest执行在新增sheet之后

在hostEl上注册mousedown事件,并设置useCapture为true, 可以让hitTest在新增sheet之前执行,hitTest结果就准确了

评分

参与人数 1金币 +1000 收起 理由
KevinChen + 1000 很给力!

查看全部评分

回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-5-25 10:37:33
8#
感谢分享!这个方法很强大!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部