是否可以序列化 Ace Session 对象? [英] Is it possible to serialize an Ace Session object?

查看:24
本文介绍了是否可以序列化 Ace Session 对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'd like to serialize and store Ace Session objects, so I can open a "File" and restore everything, value, selection, cursor position, mode, etc.

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

I've tried JSON.stringify(session) and it throws a circular error.

有什么想法吗?

推荐答案

最简单的版本是

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)

并恢复

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)

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

this doesn't cover restoring undomanager which is doable but a little trickier. you can try to bump this issue https://github.com/ajaxorg/ace/issues/1452

这篇关于是否可以序列化 Ace Session 对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆