4

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

查看他们的文档,我看到EditSession change事件说它返回更改的增量,并且Document有一个applyDeltas方法。

所以我已经加入了那个 change 事件,当它被触发时,我调用另一个 document.applyDeltas 并将它传递给它,但它不起作用。

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

4

2 回答 2

4

好的,我想通了。没有什么比看 src 更好 :)

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

//on editor1.change
this.handleEditor1Changed = function (e) {
    var deltas = new Array();
    deltas[0] = e.data;
    this.editor2.getSession().getDocument().applyDeltas(deltas);
};
于 2013-09-19T21:19:32.347 回答
1

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

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

或者,在更现代的 JavaScript 中

editor1.on('change', delta => editor2.session.doc.applyDelta(delta))
于 2021-04-29T14:18:13.970 回答