Derrick.Jiao 发表于 2020-11-28 15:33:54

SpreadJS右键菜单——条件呼出

本帖最后由 DerrickJiao 于 2020-11-28 15:49 编辑

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

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

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

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

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

                      Commands.endTransaction(context, options);
                            return true;
                      }
               }
    });

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

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

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

下载附件即可查看完整代码
页: [1]
查看完整版本: SpreadJS右键菜单——条件呼出