如何通过编程方式修改CodeMirror 6编辑器的内容值?
执行console.log(editor.state.doc)可得到如下输出:
TextLeaf { text: ["Test Text"], length: 9, Symbol(Symbol.iterator): function }
文本内容确实存储在该对象中,但直接执行editor.state.doc.text = ["New Test Text"]赋值会出现文本缺失问题——这类基于不可变状态设计的编辑器(从输出结构判断为CodeMirror 6),所有内部状态属性都是只读的,直接篡改内部属性不会触发状态校验、视图重绘和插件事件通知,自然会出现数据不一致的问题。
正确修改操作
所有文档变更必须通过编辑器的dispatch方法派发更新事务完成,全量替换整个文档内容的代码如下:
editor.dispatch({ changes: { from: 0, to: editor.state.doc.length, insert: "New Test Text" } })
逻辑是选中从文档开头(位置0)到文档结尾(位置为文档总长度)的全部内容,替换为目标新文本,这是官方推荐的合规更新方式。
关于参考伪代码的说明
你提到的editor.getDoc().setValue('New Test Text');是CodeMirror 5版本的旧API,CodeMirror 6 已经废弃了这种直接可变操作文档的模式,所有对状态的修改都必须通过事务派发,才能保证编辑器核心状态、视图渲染、第三方扩展的逻辑正常联动,避免出现内容缺失、选区错位等异常。
内容的提问来源于stack exchange,提问作者a_random_username_for_me_01
相关产品推荐
相关产品推荐

