找回密码
 立即注册

QQ登录

只需一步,快速开始

Joestar.Xu SpreadJS 开发认证
超级版主   /  发表于:2023-5-31 11:26  /   查看:2599  /  回复:2
本帖最后由 Joestar.Xu 于 2024-3-6 12:17 编辑

大家在尝试重写Designer的右键菜单的时候,往往会参考下面这段代码:


  1. function ContextMenu() {}
  2.   ContextMenu.prototype = new GC.Spread.Sheets.ContextMenu.ContextMenu(spread);
  3.   ContextMenu.prototype.onOpenMenu = function (
  4.     menuData,
  5.     itemsDataForShown,
  6.     hitInfo,
  7.     spread
  8.   ) {
  9.     // do something
  10.   };

  11.   spread.contextMenu = new ContextMenu();
复制代码

但是会发现出来的右键菜单和原来的右键菜单完全不一样。

这是因为Designer的右键菜单和未使用Designer的SpreadJS的右键菜单是不一样的。

以上重写方法使用的是未使用Designer的右键菜单。

那么想要使用Designer自己的右键菜单该如何写呢?

  1. window.onload = function () {
  2.   let designerConfig = JSON.parse(
  3.     JSON.stringify(GC.Spread.Sheets.Designer.DefaultConfig)
  4.   );

  5.   let designer = new GC.Spread.Sheets.Designer.Designer(
  6.     "gc-designer-container",
  7.     designerConfig
  8.   );

  9.   let spread = designer.getWorkbook();

  10.   let sheet = spread.getActiveSheet();

  11.   sheet.getCell(0, 0).value("Hello World");

  12.   let oldOpenMenu = spread.contextMenu.onOpenMenu;
  13.   spread.contextMenu.onOpenMenu = function (
  14.     menuData,
  15.     itemsDataForShown,
  16.     hitInfo,
  17.     spread
  18.   ) {
  19.     oldOpenMenu.apply(this, arguments);
  20.     console.log(itemsDataForShown);
  21.   };
  22. };
复制代码

这样一来设计器的右键菜单在重写后也不会变成未使用设计器的右键菜单了。

2 个回复

倒序浏览
ljl123456
注册会员   /  发表于:2023-11-28 20:32:29
沙发
你好、如果我根据右键点击不同的单元格、对menuData进行修改、我要怎么获取未修改之前的menuData呢;比如我在某次点击右键菜单的时候移除了menuData.splice(21, 6), 我要怎么在下次恢复成为删除前的菜单项呢
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-11-29 09:53:22
板凳
ljl123456 发表于 2023-11-28 20:32
你好、如果我根据右键点击不同的单元格、对menuData进行修改、我要怎么获取未修改之前的menuData呢;比如我 ...

您好,您的问题我已经在您发的帖子中给您回复了,您可以参考一下该答案:https://gcdn.grapecity.com.cn/fo ... mp;extra=#pid737405
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部