Выберите формат
HTML удобен для публикации. JSON сохраняет поддерживаемую структуру редактора. CSS храните рядом отдельным полем. getJSON возвращает независимый снимок: изменение объекта не меняет документ.
const unsubscribe = editor.on('change', event => {
const snapshot = { json: event.json, css: event.css, revision: event.revision };
// Передайте snapshot в слой сохранения вашего приложения.
console.log(snapshot);
});
const snapshot = { json: editor.getJSON(), css: editor.getCSS() };
await editor.setContent(snapshot.json, { css: snapshot.css });
unsubscribe();
В callback не вызывайте setContent с тем же документом без необходимости: это может породить цикл обновлений. Ошибку записи, очередь запросов, debounce, повтор и состояние «сохранено» организует приложение.
Ревизия и конфликты
revision — текущая ревизия локального документа, а не серверная версия или уникальный глобальный id. Замена фрагмента и поздний ответ загрузки проверяют её. Для серверных конфликтов используйте отдельную версию записи приложения.
Для хранения JSON предусмотреть свою версию формата и проверку восстановления после обновления библиотеки. Импорт ошибочного/небезопасного содержимого не должен заменять рабочую копию без подтверждения.
Исходник
Change приходит после корректного применения. Во время ошибки getHTML/getJSON/getCSS возвращают последнюю применённую версию, не текст ошибочного черновика. События, пример сохранения.