Joestar.Xu 发表于 2023-5-31 11:26:33

SpreadJS动态重写设计器右键菜单

本帖最后由 Joestar.Xu 于 2024-3-6 12:17 编辑

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


function ContextMenu() {}
ContextMenu.prototype = new GC.Spread.Sheets.ContextMenu.ContextMenu(spread);
ContextMenu.prototype.onOpenMenu = function (
    menuData,
    itemsDataForShown,
    hitInfo,
    spread
) {
    // do something
};

spread.contextMenu = new ContextMenu();
但是会发现出来的右键菜单和原来的右键菜单完全不一样。

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

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

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

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

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

let spread = designer.getWorkbook();

let sheet = spread.getActiveSheet();

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

let oldOpenMenu = spread.contextMenu.onOpenMenu;
spread.contextMenu.onOpenMenu = function (
    menuData,
    itemsDataForShown,
    hitInfo,
    spread
) {
    oldOpenMenu.apply(this, arguments);
    console.log(itemsDataForShown);
};
};
这样一来设计器的右键菜单在重写后也不会变成未使用设计器的右键菜单了。

ljl123456 发表于 2023-11-28 20:32:29

你好、如果我根据右键点击不同的单元格、对menuData进行修改、我要怎么获取未修改之前的menuData呢;比如我在某次点击右键菜单的时候移除了menuData.splice(21, 6), 我要怎么在下次恢复成为删除前的菜单项呢

Richard.Huang 发表于 2023-11-29 09:53:22

ljl123456 发表于 2023-11-28 20:32
你好、如果我根据右键点击不同的单元格、对menuData进行修改、我要怎么获取未修改之前的menuData呢;比如我 ...

您好,您的问题我已经在您发的帖子中给您回复了,您可以参考一下该答案:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=199298&page=1&extra=#pid737405
页: [1]
查看完整版本: SpreadJS动态重写设计器右键菜单