找回密码
 立即注册

QQ登录

只需一步,快速开始

KevinChen 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-5-15 00:50  /   查看:3047  /  回复:0

SpreadJS V14 Update1 重点新特性:
在GC.Spread.Commands.UndoManager上公开API,以获取撤消/重做命令栈的详细信息。

在V14.0及更早的版本中,用户可以根据spread.undoManager().undo() 进行撤消操作,并根据spread.undoManager().redo() 进行重做操作。但是用户无法获取撤消和重做堆栈的详细信息。在一些需要记录用户操作记录的场景下,常常需要依赖命令监听接口,甚至对应的事件回调等方式来实现。
而在SpreadJS V14 Update1 中,我们为GC.Spread.Commands.UndoManager添加了新的接口API,支持获取和操作撤消/重做堆栈的方法。并且可以根据maxCount方法限制堆栈最大长度。


具体API描述如下:

class GC.Spread.Commands.UndoManager
  1. ///* function getRedoStack()
  2. /**
  3. * Get the redo stack. 获取Redo命令栈详情
  4. * @returns {Command[]} ICommand is an object. It include sheetName and cmd. the type of sheetName and cmd both is string.
  5. */
复制代码
  1. ///* function getUndoStack()
  2. /**
  3. * Get the undo stack. 获取Undo命令栈详情
  4. * @returns {Command[]} ICommand is an object. It include sheetName and cmd. the type of sheetName and cmd both is string.
  5. */
复制代码
  1. ///* function maxSize(value?: number):any
  2. /**
  3. * Gets or sets the the undo/redo stack max size. 获取或设置Undo/Redo命令栈最大长度。
  4. * @param {number} value this value should be greater or equal to 0.
  5. * @returns {number | UndoManager} If no value is set. return the max size of undo/redo stack. otherwise return UndoManager.
  6. */
复制代码
getUndoStack / getRedoStack 方法返回的数组中,会包含若干个以下结构的json对象用以描述命令信息:
  1. interface Command {
  2. cmd: string;
  3. sheetName: string;
  4. }
复制代码


示例代码:
image.png966071472.png
如上图所示:
1. 通过spread.undoManager()可以获取到UndoManager实例;
2. 在执行过操作命令后,调用undoManager.getUndoStack() 可以拿到Undo栈命令数组;
3. 在执行过Undo后,调用undoManager.getRedoStack()可以拿到Redo栈命令数组;
4. Json中记录了命令的详情。

执行策略:
浅表复制后,getRedoStack / getUndoStack方法将返回一个新数组
在maxSize方法中,如果用户输入了非法值,则运行时将执行以下操作:
如果输入负数,则运行时不执行任何操作并返回undoManager。


0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部