如何在Ace编辑器中获取/应用更改delta?

时间:2013-09-19 21:00:51

标签: javascript ace-editor

我正在努力保持Ace编辑器的两个实例同步。因此,当用户输入一个时,另一个会更新。

查看他们的文档,我看到EditSession change事件表示它返回了更改的增量,DocumentapplyDeltas方法。

所以我已经迷上了这个更改事件,当它被触发时,我调用另一个document.applyDeltas并将其传递,但​​它不起作用。

我一直在浏览他们的文档(和谷歌一小时),但我没有看到如何让它们保持同步。有谁知道我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

好的,我明白了。什么都没有看src:)

文档上的applyDeltas方法需要一个数组,你需要从更改事件中获取数据。

//on editor1.change
this.handleEditor1Changed = function (e) {
    var deltas = new Array();
    deltas[0] = e.data;
    this.editor2.getSession().getDocument().applyDeltas(deltas);
};

答案 1 :(得分:0)

如果您查看源代码,您应该已经看到 applyDeltas 只是在循环中为数组中的每个元素调用 applyDelta。因此,您可以简单地执行以下操作:

editor1.on('change', function(delta) {
    editor2.session.doc.applyDelta(delta);
}

或者,在更现代的 JavaScript 中

editor1.on('change', delta => editor2.session.doc.applyDelta(delta))