找回密码
 立即注册

QQ登录

只需一步,快速开始

qnsh

初级会员

14

主题

27

帖子

261

积分

初级会员

积分
261
qnsh
初级会员   /  发表于:2019-2-26 09:10  /   查看:4163  /  回复:5
如何让spreadjs 右键菜单根据选择的单元格内容动态显示不同的菜单,当单元格值或者公式满足指定条件时显示对应的右键菜单。

5 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-2-26 09:16:16
沙发
您好,可以通过重写右键菜单的MenuView来实现,具体方法请参考技术博客:

https://www.grapecity.com.cn/blo ... ht-click-menu-part2

关键代码如下:

  1. CustomMenuView.prototype.createMenuItemElement = function (menuItemData) {
  2. CustomMenuView.prototype.createMenuItemElement = function (menuItemData) {
  3.     // 先执行原类的方法,继承右键菜单的样式
  4.     var menuItemView = GC.Spread.Sheets.ContextMenu.MenuView.prototype.createMenuItemElement.call(this, menuItemData);
  5.     /*
  6.     * 添加自己的样式。
  7.     *
  8.     *   menuItemView 是右键菜单当前项的容器div,
  9.     *   自定义的样式可以在此添加。
  10.     *
  11.     *   需要注意的是,如果想引入第三方控件,比如datepicker之类,
  12.     *   可能会与SpreadJS的样式与事件产生冲突,
  13.     *   因此除非您从技术上做过充分的验证,
  14.     *   否则不推荐在此设计引入过重的第三方控件。
  15.     * */
  16.     if (menuItemData.name === "selectColorPicker1") {
  17.         $(menuItemView).append(createColorpicker(1));
  18.         return menuItemView;
  19.     } else if (menuItemData.name === "selectColorPicker2") {
  20.         $(menuItemView).append(createColorpicker());
  21.         return menuItemView;
  22.     }else {
  23.         return menuItemView;
  24.     }
  25. };
复制代码
回复 使用道具 举报
qnsh
初级会员   /  发表于:2019-2-26 15:24:43
板凳
KevinChen 发表于 2019-2-26 09:16
您好,可以通过重写右键菜单的MenuView来实现,具体方法请参考技术博客:

https://www.grapecity.com.cn ...

这种方法只能增加自定义的菜单,重写createMenuItemElement 时不能获取到选定的单元格信息。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-2-26 16:58:48
地板
您好,我把博客里面的示例完善了一下,演示了重写onOpenMenu方法,请参考下列代码:

  1. //onOpenMenu是在右键点击时触发的事件
  2.         ContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, spread) {
  3.             console.log(menuData);
  4.             console.log(itemsDataForShown);

  5.             var index = -1;
  6.             for(let i=0; i<itemsDataForShown.length; i++){
  7.                 var item = itemsDataForShown[i];
  8.                 if(item.name === "gc.spread.filter"){
  9.                     index = i;
  10.                     break;
  11.                 }
  12.             }
  13.             if(index > -1){
  14.                 itemsDataForShown.splice(index, 1);
  15.             }
  16.             console.log(hitInfo);
  17.             console.log(spread);
  18.         };
复制代码

CustomContextMenu_MenuView.html

9.42 KB, 下载次数: 140

回复 使用道具 举报
qnsh
初级会员   /  发表于:2019-2-28 10:17:54
5#
KevinChen 发表于 2019-2-26 16:58
您好,我把博客里面的示例完善了一下,演示了重写onOpenMenu方法,请参考下列代码:

谢谢,可以实现功能需求了
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-2-28 15:13:07
6#
不客气,很高兴解决了您的问题!

本帖我就结帖了,有新的问题欢迎发新帖交流~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部