6

我想创建一个系统来存储Undo&Redo stack摩纳哥编辑器的。

为什么?:我有一个摩纳哥实例,我在其中进行了一些更改。然后我必须处理该实例并打开一个新实例。在这里,我想恢复与前一个实例相同的堆栈状态。

问题:我怎样才能得到和恢复Undo&Redo stack


更新: 当我处理 Monaco 编辑器实例时,JavaScript 环境可能会被完全破坏。它集成在C#能够与之通信的环境中JS。我的目标是将其存储Monaco Editor modelC#序列化。

4

2 回答 2

2

这一切都与模型有关。

如果您恢复相同的模型,您将拥有 Undo&Redo 堆栈

查看示例

var model = editorInstance.getModel();
var viewState = editorInstance.saveViewState();

//Destroy your instance for whatever reason
editorInstance.dispose();

//When you create the new instance load the model that you saved
var newInstance = monaco.editor.create(elem, options);
newInstance.setModel(model);
newInstance.restoreViewState(viewState);

可能有帮助的方法是与 monaco 事件挂钩

monaco.editor.onWillDisposeModel(saveModel)

viewState用于恢复编辑器的光标位置。

于 2018-03-09T08:11:56.857 回答
0

这是非官方的方式:

const {past, future} = editor.getModel()._commandManager;

在您的情况下,您可以JSON.stringifypastand上运行future。然后,当您重新创建编辑器时,您只需

const cm = editor.getModel()._commandManager;
cm.past = JSON.parse(past);
cm.future = JSON.parse(future);
于 2019-09-04T00:23:36.460 回答