找回密码
 立即注册

QQ登录

只需一步,快速开始

Derrick.Jiao 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2020-11-28 15:33  /   查看:5500  /  回复:0
本帖最后由 DerrickJiao 于 2020-11-28 15:49 编辑

背景:SpreadJS拥有强大的自定制能力,其中自定制右键菜单就是比较突出的一个功能。题目右键菜单的条件呼出是指,自定义的右键菜单选项可以通过某些条件呼出。也就是说可以实现在某些指定的单元格上,右键可以呼出指定的菜单。本帖实现的是,为有公式的单元格的右键菜单添加一个“钻取”选项,而没有公式的单元格则右键无此选项。

首先,我们先初始化一个表单,为其添加数据样式等,具体这里就不再赘述。

我们直接来到最核心的部分:自定义右键菜单

这部分代码利用commandManger注册一个命里,可以将你的逻辑填写在注释处。
  1. spread.commandManager().register("drill",{
  2.         canUndo: true,
  3.         execute: function (context, options, isUndo) {
  4.         var Commands = GC.Spread.Sheets.Commands;
  5.         // 在此加cmd
  6.         options.cmd = "drill";
  7.         if (isUndo) {
  8.                Commands.undoTransaction(context, options);
  9.                       return true;
  10.                } else {
  11.                       Commands.startTransaction(context, options);

  12.                     //这里添加你的逻辑
  13.                       alert("我是公式!!")

  14.                       Commands.endTransaction(context, options);
  15.                             return true;
  16.                       }
  17.                }
  18.     });
复制代码


这样,当你的选项被点击式,就会执行上述的逻辑。

下面是重写onOpenMenu方法,将呼出右键菜单的逻辑写在里面。这里用getFormula判断当前单元格是否有公式,如果有,则在呼出的右键菜单上添加“钻取”这个选项。当然,你也可以根据你的需求添加不同的判断条件。
  1. function ContextMenu(){}
  2.         ContextMenu.prototype = new GC.Spread.Sheets.ContextMenu.ContextMenu(spread);
  3.         ContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo,spread) {
  4.    
  5.                 var sheet = spread.getActiveSheet();
  6.    
  7.    
  8.                 if (sheet.getFormula(sheet.getActiveRowIndex(),sheet.getActiveColumnIndex()) !== null) {
  9.                          itemsDataForShown.push({text: "钻取", name: "find", command: "drill",
  10.                          workArea: "viewportcolHeaderrowHeaderslicercorner"});
  11.                 }
  12.    
  13.         };
  14.    
  15.         var contextMenu = new ContextMenu();
  16.         spread.contextMenu = contextMenu;
复制代码


这样,就可以实现在不同的区域实现不同的右键菜单了。怎么样,学会了吗?

下载附件即可查看完整代码

呼出右键.zip

6.64 KB, 下载次数: 226

0 个回复

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