找回密码
 立即注册

QQ登录

只需一步,快速开始

写BUG的程序员
金牌服务用户   /  发表于:2024-9-3 18:28  /   查看:994  /  回复:20
1金币
本帖最后由 写BUG的程序员 于 2024-9-3 18:32 编辑

通过如下API:
const cm = spread.commandManager()
cm.addListener('myListener', (com) => {
      if (com.actionType === 0) {
      }
    })



actionType都有哪些值,目前看有0: 正常操作, 1:撤销  2: 重做。 请问一下,还有其他的取值吗?

第二个问题: 上面事件里记录的com.command 是否都可以通过spread.commandManager().execute() 方法还原?

20 个回复

正序浏览
Wilson.Zhang
超级版主   /  发表于:2024-9-24 15:34:59
21#
您好!由于您较长时间未回贴,且从跟帖回复中了解到问题已得到有效解决方案,那就结贴了。如有问题,欢迎发新帖沟通。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-10 09:10:29
20#
您好!您的问题解决的怎么样了呢?我们在论坛找到一篇文章,其中介绍了在线协同场景下的命令同步,文章附带的demo中包含了命令同步的处理逻辑,如下图所示即其对命令中range的反序列化逻辑:
1725930581222.png741563110.png

您可以参考文章综合了解详情。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-6 17:16:38
19#
写BUG的程序员 发表于 2024-9-6 13:59
就是通过执行spread.commandManager().execute()执,没有把复制的内容粘贴上啊

需要您提供下您使用的命令内容,我们尝试复现下。
回复 使用道具 举报
写BUG的程序员
金牌服务用户   /  发表于:2024-9-6 13:59:20
18#
本帖最后由 写BUG的程序员 于 2024-9-6 14:05 编辑
Wilson.Zhang 发表于 2024-9-6 13:31
您所说的“还原”是指通过spread.commandManager().execute()执行了复制粘贴命令后手动撤销没生效吗?

就是通过执行spread.commandManager().execute()执,没有把复制的内容粘贴上啊


比如,做了两个步骤:
1、在A1单元格输入  123
2、把A1单元格复制到B2单元格

此时,记录了两个Command,一个是"editCell", 一个是"clipboardPaste"


然后再一个新的spread里通过spread.commandManager().execute() 执行这两个Command应该能复原刚才的两个操作


也就是 A1单元格是123   B2单元格也是 123


现在只能A1还原, B2还原不了,  即使把clipboardPaste中的两个range属性通过new range编程range对象后也无法还原
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-6 13:31:21
17#
写BUG的程序员 发表于 2024-9-6 11:49
复制粘贴操作,还原了range对象也没有还原

您所说的“还原”是指通过spread.commandManager().execute()执行了复制粘贴命令后手动撤销没生效吗?
回复 使用道具 举报
写BUG的程序员
金牌服务用户   /  发表于:2024-9-6 11:49:46
16#
Wilson.Zhang 发表于 2024-9-5 17:55
暂不支持new Command,您可以尝试下我们给您提供的解决思路。

复制粘贴操作,还原了range对象也没有还原


并且目前只发现了这两个操作,不知道是否还有其他操作会有这个问题
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-5 17:55:05
15#
写BUG的程序员 发表于 2024-9-5 16:37
有没有可能提供一个Command对象,通过new Command,去初始化所有Command实例

暂不支持new Command,您可以尝试下我们给您提供的解决思路。
回复 使用道具 举报
写BUG的程序员
金牌服务用户   /  发表于:2024-9-5 16:37:59
14#
Wilson.Zhang 发表于 2024-9-5 15:08
抱歉,我给您指错路了。

有没有可能提供一个Command对象,通过new Command,去初始化所有Command实例
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-5 15:08:24
13#
写BUG的程序员 发表于 2024-9-5 13:47
现在就是这样做的,用JSON.parse恢复的时候拖拽和复制粘贴的range就没有正常恢复

抱歉,我给您指错路了。



我们又调研了下,通过JSON.parse()对{ "row": 2, "col": 3, "rowCount": 5, "colCount": 1}对象字面量解析后的对象并不等同于new GC.Spread.Sheets.Range(2, 3, 5, 1)创建的对象,new出来的对象有原型链、其他方法,而对象字面量解析后的对象仅有属性,在命令调用时不起作用。

针对您的需求场景,我们给您提供一个解决思路:如果您的场景中只有拖拽和复制粘贴的命令有影响,您可以针对这几个命令单独处理,将其中的range相关的属性值均对象化即可。


回复 使用道具 举报
写BUG的程序员
金牌服务用户   /  发表于:2024-9-5 13:47:41
12#
本帖最后由 写BUG的程序员 于 2024-9-5 14:10 编辑
Wilson.Zhang 发表于 2024-9-5 12:21
不客气!您试下JSON.stringify()和JSON.parse(),JSON.stringify()将对象转换为JSON字符串,JSON.parse() ...

现在就是这样做的,用JSON.parse恢复的时候拖拽和复制粘贴的range就没有正常恢复
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部