Clark.Pan 发表于 2021-1-31 22:46:49

SpreadJS在线表格编辑器自定义功能 -- 添加多级右键菜单(Content Menu)

本帖最后由 dexteryao 于 2021-2-3 13:55 编辑

上一期我们将了如何自定义右键菜单,本期我们在其基础上进行扩展,将讲解如何自定义多级的右键菜单
下面实例将定制一个多级菜单用于设置文字旋转功能,提供三个子菜单-90度,水平,90度
首先我们先定义菜单文字旋转。
designerConfig.commandMap["textRotation"]= {
      text: "文字旋转",
      commandName: "textRotation",
      subCommands:[
            "negativeVertical",
            "horizontal",
            "vertical"
      ],
      visibleContext:"ClickViewport"
    }在父级菜单中我们没有定义具体的execute以为改菜单不需要执行任何操作,我们定义了subCommands来扩展三个子菜单
subCommands:[
"negativeVertical",
"horizontal",
"vertical"
]之后我们同样在commandMap中定义三个子菜单
designerConfig.commandMap["negativeVertical"]= {
      text:"-90度",
      commandName: "negativeVertical",
      //enableContext: "allowEditObject",
      execute: async (context) => {
            var spread = context.getWorkbook();
            var commandManager = spread.commandManager();
            commandManager.execute({cmd: "executeRotation", sheetName: spread.getActiveSheet().name(),degree:-90});
      }
    }

    designerConfig.commandMap["horizontal"]= {
      text:"水平",
      commandName: "horizontal",
      //enableContext: "allowEditObject",
      execute: async (context) => {
            var spread = context.getWorkbook();
            var commandManager = spread.commandManager();
            commandManager.execute({cmd: "executeRotation", sheetName: spread.getActiveSheet().name(),degree:0});
      }
    }

    designerConfig.commandMap["vertical"]= {
      text:"90度",
      commandName: "vertical",
      //enableContext: "allowEditObject",
      execute: async (context) => {
            var spread = context.getWorkbook();
            var commandManager = spread.commandManager();
            commandManager.execute({cmd: "executeRotation", sheetName: spread.getActiveSheet().name(),degree:90});
      }
    }这里需要定义具体的execute,因为子菜单点击后需要进行操作,操作中我们为了方便undo redo,选择用命令实现具体操作。具体命令定义如下
var spread = designer.getWorkbook();
    var commandManager = spread.commandManager();
    var _executeRotation = {
      canUndo: true,
      execute: function (context, options, isUndo) {
            var Commands = GC.Spread.Sheets.Commands;
            if (isUndo) {
                Commands.undoTransaction(context, options);
                return true;
            } else {
                Commands.startTransaction(context, options);
                var sheet = context.getSheetFromName(options.sheetName);
                sheet.suspendPaint();
                var selections = sheet.getSelections();
                for(var i=0;i<selections.length;i++){
                  sheet.getRange(selections.row,
                        selections.col,
                        selections.rowCount,
                        selections.colCount,
                        GC.Spread.Sheets.SheetArea.viewport).textOrientation(options.degree);
                }
                sheet.resumePaint();
                Commands.endTransaction(context, options);
                return true;
            }
      }
    };
    commandManager.register("executeRotation", _executeRotation);最后我们需要将父级菜单push到contextmenu中,这里注意只需要push父级菜单即可,子菜单不需要因为子菜单是通过父级菜单扩展弹出的。但是子菜单需要定义在commandMap中。
designerConfig.contextMenu.push("textRotation");

HDXXH 发表于 2021-2-4 17:35:38

visibleContext有哪些可选项呢

Clark.Pan 发表于 2021-2-8 09:55:24

HDXXH 发表于 2021-2-4 17:35
visibleContext有哪些可选项呢

您的具体需求是什么?

Winny 发表于 2021-3-18 17:22:03

能不能添加一个示例的演示动图?

littleknife 发表于 2021-3-25 20:15:23

这样设置完右键并不会生效 需要重新setConfig吧
以前的方法设置完再次右键就会生效的

Derrick.Jiao 发表于 2021-3-26 09:00:22

littleknife 发表于 2021-3-25 20:15
这样设置完右键并不会生效 需要重新setConfig吧
以前的方法设置完再次右键就会生效的

是的,这个是往config里面添加功能所以设置完成后要setConfig,上面的示例演示的仅是添加多级右键菜单。

梅梅梅梅 发表于 2023-1-12 14:08:24

右键添加二级菜单可以这么做,那么三级要怎么添加呢?按这种方法在二级添加了subCommands,但是不起作用

Lynn.Dou 发表于 2023-1-12 15:25:48

梅梅梅梅 发表于 2023-1-12 14:08
右键添加二级菜单可以这么做,那么三级要怎么添加呢?按这种方法在二级添加了subCommands,但是不起作用

组件版设计器目前仅支持到二级菜单项,三级菜单项不支持设置。

梅梅梅梅 发表于 2023-1-12 15:39:12

Lynn.Dou 发表于 2023-1-12 15:25
组件版设计器目前仅支持到二级菜单项,三级菜单项不支持设置。

好吧,那大概什么时候才会支持三级设置呢?

Lynn.Dou 发表于 2023-1-12 15:58:46

梅梅梅梅 发表于 2023-1-12 15:39
好吧,那大概什么时候才会支持三级设置呢?

在这篇贴中给您做了回复:
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=160173&fromuid=59119
页: [1]
查看完整版本: SpreadJS在线表格编辑器自定义功能 -- 添加多级右键菜单(Content Menu)