找回密码
 立即注册

QQ登录

只需一步,快速开始

ljl123456

注册会员

20

主题

54

帖子

180

积分

注册会员

积分
180
ljl123456
注册会员   /  发表于:2023-11-28 21:28  /   查看:869  /  回复:5
1金币
本帖最后由 Richard.Huang 于 2023-11-30 15:53 编辑


产品:SpreadJS
  1. let oldOpenMenu = spread.contextMenu.onOpenMenu;
  2.   spread.contextMenu.onOpenMenu = function (
  3.     menuData,
  4.     itemsDataForShown,
  5.     hitInfo,
  6.     spread
  7.   ) {
  8.    if (hitInfo.worksheetHitInfo.col < 2) {
  9.         menuData.splice(21, 6)
  10.     oldOpenMenu.apply(this, arguments);
  11.   };
  12. };
复制代码

我在点击表格前两列时、删掉的右键菜单中的插入和删除操作、
但现在是将整个表单的右键菜单的插入和删除都删掉了;
我如何获取删除之前的右键菜单、在我点击其他列的时候恢复成原来的菜单



最佳答案

查看完整内容

您的意思是,重新唤起右键菜单,右键菜单中的选项还是最初始化的选项,然后您只要通过splice方法删除其中选项而不用提前拷贝一份是吗? 这是因为designer的右键菜单和spreadjs的右键菜单的实现是不一样的,您在spreadjs中可以这样做,而designer中不能这样做

5 个回复

倒序浏览
最佳答案
最佳答案
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-11-28 21:28:16
来自 4#
ljl123456 发表于 2023-11-29 10:32
只能提前拷贝一份是吧、没办法获取初始化的值是吧

您的意思是,重新唤起右键菜单,右键菜单中的选项还是最初始化的选项,然后您只要通过splice方法删除其中选项而不用提前拷贝一份是吗?

这是因为designer的右键菜单和spreadjs的右键菜单的实现是不一样的,您在spreadjs中可以这样做,而designer中不能这样做
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-11-29 09:47:51
2#
您好,根据您提供的代码来看,您是直接在menudata上进行splice操作,该操作会改变原数组信息,因此您需要提前维护好一个完整的右键菜单数组以及一个切除了索引21~26的数组:
  1. const originalArray = spread.contextMenu.menuData;
  2. const newArray = originalArray.slice(0, 21).concat(originalArray.slice(21 + 6));
复制代码

然后您再根据您的需要为您的menuData进行赋值:
  1. let oldOpenMenu = spread.contextMenu.onOpenMenu;
  2. spread.contextMenu.onOpenMenu = function (
  3.     menuData,
  4.     itemsDataForShown,
  5.     hitInfo,
  6.     spread
  7. ) {
  8.     if (hitInfo.worksheetHitInfo.col < 2) {
  9.         menuData = newArray;
  10.         oldOpenMenu.apply(this, arguments);
  11.     } else {
  12.         menuData = originalArray;
  13.         oldOpenMenu.apply(this, arguments);
  14.     };
  15. };
复制代码


附件是我按照上述表述实现的一个demo,您可以参考一下

designerTest.html

4.29 KB, 下载次数: 35

回复 使用道具 举报
ljl123456
注册会员   /  发表于:2023-11-29 10:32:44
3#
Richard.Huang 发表于 2023-11-29 09:47
您好,根据您提供的代码来看,您是直接在menudata上进行splice操作,该操作会改变原数组信息,因此您需要提 ...

只能提前拷贝一份是吧、没办法获取初始化的值是吧
回复 使用道具 举报
ljl123456
注册会员   /  发表于:2023-11-29 12:38:06
5#
好的谢谢,OK
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-11-29 13:33:50
6#

好的,那么本贴就先结帖了,后续有新的问题欢迎继续发帖讨论
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部