jerrychen3168 发表于 2024-12-31 13:31:57

[17.1.4] undo無法恢復自已寫代碼造成的變更

本帖最后由 Wilson.Zhang 于 2024-12-31 13:36 编辑


你好,
當我使用如下代碼變更單元格字体顏色,可否用undo的指令復原?
(Designer功能欄可以,但自己寫指令卻不行,如图3)
图1. 寫代碼變更顏色
activeSheet.getRange(range.row, range.col, range.rowCount, range.colCount).foreColor(ls_color_name);

图2. 寫代碼變更顏色後,無論是寫代碼或者Designer本身undo都無法恢復.
spread.commandManager().execute({ cmd: "undo", sheetName: sheet_name });

图3.

香香 发表于 2024-12-31 13:31:58

本帖最后由 香香 于 2024-12-31 14:00 编辑

您可以參照以下demo將設置單元格顔色的代碼分裝成command:
https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/worksheet/actions/custom-action/purejs

Wilson.Zhang 发表于 2024-12-31 13:48:49

您好!UI操作會被自動記錄在撤銷棧中,撤銷的操作則在重做棧中記錄。UndoManager保存了撤銷棧和重做棧,憑此響應撤銷和重做。

因此,需要通過UndoManager撤銷和恢復代碼觸發的動作,參考如下代碼:
var undoManager = spread.undoManager();
//撤銷
undoManager.undo();
//恢復
undoManager.redo();

Wilson.Zhang 发表于 7 天前

誠如3樓用戶提供的方式將您的操作封裝為自定義command,在命令邏輯定義中開啓事務支持撤銷和恢復。您可以參考3樓用戶給出的資源鏈接瞭解詳情。
页: [1]
查看完整版本: [17.1.4] undo無法恢復自已寫代碼造成的變更