Я хотел бы сохранить экземпляр Ace Editor UndoManager
в сеансах браузера, как, кажется, Cloud9 IDE .
Я пыталсядля строкового преобразования объекта UndoManager
, чтобы я мог сохранить его где-нибудь для последующего извлечения его следующим образом:
let undoManager = editorHTML.getSession().getUndoManager();
let undoManagerStr = JSON.stringify(undoManager);
Но вызов stringify вызывает исключение Uncaught TypeError: Converting circular structure to JSON
Я такжепопытался извлечь куски объекта для хранения:
let redoStackStr = JSON.stringify(undoManager.$redoStack, null, 2);
let undoStackStr = JSON.stringify(undoManager.$undoStack, null, 2);
let dirtyCounter = undoManager.dirtyCounter;
.
let manager = new ace.UndoManager();
if(redoStackStr && undoStackStr && dirtyCounter) {
manager.$redoStack = JSON.parse(redoStackStr);
manager.$undoStack = JSON.parse(undoStackStr);
manager.dirtyCounter = dirtyCounter;
}
editorHTML.getSession().setUndoManager(manager)
Но Эйсу это совсем не нравится, и он взрывает CTRL-Z
Я бы предпочел не писать собственный менеджер истории файлов, когда он уже существует.
Редактировать
Я смог решить эту проблему, используя ответ, выбранный ниже, нотолько после обновления до версии Ace Editor 1.4.2.Приведенный выше код был моей попыткой после анализа UndoManager
в версии 1.2.8, поэтому он настолько отличается.