是否可以序列化Ace Session对象?

jpi*_*ora 3 javascript ace-editor

我想序列化和存储Ace Session对象,所以我可以打开一个"文件"并恢复所有内容,值,选择,光标位置,模式等.

我试过了JSON.stringify(session),它抛出一个循环错误.

有任何想法吗?

a u*_*ser 5

最简单的版本

var session = editor.session
state = {}
state.value = session.getValue();
state.selection = session.selection.toJSON()
state.options = session.getOptions()
state.mode = session.getMode().$id
state.folds = session.getAllFolds().map(function(fold) {
    return {
        start       : fold.start,
        end         : fold.end,
        placeholder : fold.placeholder
    };
});
state.scrollTop = session.getScrollTop()
state.scrollLeft = session.getScrollLeft()

JSON.stringify(state)
Run Code Online (Sandbox Code Playgroud)

并恢复

session.setValue(state.value)
session.selection.fromJSON(state.selection)
session.setOptions(state.options)
session.setMode(state.mode)
try {
    state.folds.forEach(function(fold){
        session.addFold(fold.placeholder, 
            Range.fromPoints(fold.start, fold.end));
    });
} catch(e) {}
session.setScrollTop(state.scrollTop)
session.setScrollTop(state.scrollLeft)
Run Code Online (Sandbox Code Playgroud)

这不包括恢复undomanager,这是可行但有点棘手.你可以尝试碰这个问题https://github.com/ajaxorg/ace/issues/1452

  • 最新的https://github.com/ajaxorg/ace-builds/blob/master/src/ace.js#L7694-L7706 (2认同)
  • 多亏了这一点 - 文档确实让我们失望了.在我找到这个答案之前,我几乎想要切换到codemirror. (2认同)