找回密码
 立即注册

QQ登录

只需一步,快速开始

咕咕咕

注册会员

4

主题

11

帖子

57

积分

注册会员

积分
57
咕咕咕
注册会员   /  发表于:2023-9-26 10:51  /   查看:1467  /  回复:4
本帖最后由 Clark.Pan 于 2023-9-27 16:04 编辑

产品名称:SpreadJS
版本:V16.2.2

需求背景:
    需要在sheetName修改时,同时执行某些表单操作A,并且希望undo/redo时能包含操作A。

代码逻辑:
    目前是监听了anyscLicenser,把renameSheet命令直接撤销,然后执行自定义命令,自定义命令中包含重新调用renameSheet命令和操作A(demo中用修改单元格代替)
问题:
    多次执行修改sheet名称,第一次undo队列正常,第二次开始,自定义命令从表象上看不会进undo队列。

demo.html.zip

1.87 KB, 下载次数: 162

4 个回复

倒序浏览
咕咕咕
注册会员   /  发表于:2023-9-26 15:10:03
沙发
可能定位到原因了。
自定义命令里执行了renameSheet之后,需要把自定义命令的options.sheetName改成重命名之后的,可以帮忙确认一下是不是这个原因
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-9-26 16:33:45
板凳
您好,我这边根据您的Demo,找到了一个更简便的实现方法:

  let designerConfig = JSON.parse(
    JSON.stringify(GC.Spread.Sheets.Designer.DefaultConfig)
  );

  let newCommand = GC.Spread.Sheets.Commands.renameSheet;
  if (newCommand) {
    let oldExecute = newCommand.execute;
    newCommand.execute = function (context, options, isUndo) {
      let Commands = GC.Spread.Sheets.Commands;
      if (isUndo) {
        Commands.undoTransaction(context, options);
        return true;
      } else {
        Commands.startTransaction(context, options);
        sheet.setValue(0, 0, "aaa");
        oldExecute.call(this, context, options, isUndo);
        Commands.endTransaction(context, options);
        return true;
      }
    };
  }
  designerConfig.commandMap = {};
  designerConfig.commandMap[GC.Spread.Sheets.Commands.renameSheet] = newCommand;

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

效果如下:

3.gif893894042.png
回复 使用道具 举报
咕咕咕
注册会员   /  发表于:2023-9-26 16:55:56
地板
Joestar.Xu 发表于 2023-9-26 16:33
您好,我这边根据您的Demo,找到了一个更简便的实现方法:

  let designerConfig = JSON.parse(

感谢回复。
这边用这个方案是有个前置的实现背景:之前需要在【gc.spread.contextMenu.rowHeaderinsertCopiedCells】和【gc.spread.contextMenu.colHeaderinsertCopiedCells】命令执行时做一些操作,这两个命令似乎不支持重写,所以用了现在这个实现。
我再试一下自定义命令的方式,不行的话就用这边提供的实现方法来完成这次的需求,谢谢。
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-9-26 17:33:38
5#
不客气哈,后续有其他问题随时追问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部