代码镜像批量更改

CodeMirror batch changes

本文关键字:镜像 代码      更新时间:2023-09-26

有没有办法在codemirror API中批处理更改?例如,我正在使用 changes API 来捕获更改事件,但如果用户按住键盘上的一个字母,他/她将在更改数组中获得多个条目。是否有一个事件可以缓冲这些更改,并且只使用数组中的一个对象进行调用。

Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+delete" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" 

change 事件总是在用户更改CodeMirror <textarea>后发生。但是,这些事件被缓冲为history对象,您可以使用doc.getHistory()doc.setHistory()方法根据自己的喜好访问、修改和重用这些对象:

var cm = CodeMirror.fromTextArea(document.getElementById('codesnippet_editable'), {
        mode: "javascript",
        theme: "default",
        lineNumbers: true,
        pollInterval: 100
});
    
document.getElementById("foo").addEventListener("click", function () {
    console.log(cm.getDoc().getHistory());  
    //check console for done and undone objects
});

.HTML:

<button id="foo">See console after clicking me</button>
    
<textarea rows="4" cols="50" name="codesnippet_editable" id="codesnippet_editable">
// Write some code here
</textarea>

小提琴:http://jsfiddle.net/1kg2y0w5/

您可以使用pollInterval更改生成历史记录对象的频率

轮询间隔:数字

指示 CodeMirror 应以多快的速度轮询其输入文本区域以查找更改(聚焦时)。大多数输入由事件捕获,但某些内容(如某些浏览器上的 IME 输入)不会生成允许 CodeMirror 正确检测它的事件。因此,它进行轮询。默认值为 100 毫秒。

这也适用于用户按住键的情况:尽管按住键的时间超过轮询间隔,但只会创建一个对象。