本帖最后由 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;
复制代码
这样,就可以实现在不同的区域实现不同的右键菜单了。怎么样,学会了吗?
下载附件即可查看完整代码
|
|