我也在尝试保持两个 Ace 编辑器实例同步。因此,当用户键入一个时,另一个会更新。
查看他们的文档,我看到 EditSession change
事件说它返回更改的增量,并且文档具有applyDeltas
方法。
所以我已经挂接到了那个更改事件,当它被触发时,我调用另一个 document.applyDeltas 并将其传递过来,但它不起作用。
我一直在浏览他们的文档(和谷歌一个小时),但我没有看到如何让他们保持同步。有谁知道我该怎么做?
好的,我想通了。没有什么比看 src :) 更好的
了文档上的 applyDeltas 方法需要一个数组,并且您需要从更改事件中获取数据。
//on editor1.change
this.handleEditor1Changed = function (e) {
var deltas = new Array();
deltas[0] = e.data;
this.editor2.getSession().getDocument().applyDeltas(deltas);
};
如果你查看源代码,你应该已经看到applyDeltas
只是在循环中调用数组中每个元素的applyDelta
。 因此,您可以简单地执行此操作:
editor1.on('change', function(delta) {
editor2.session.doc.applyDelta(delta);
})
或者,在更现代的JavaScript中
editor1.on('change', delta => editor2.session.doc.applyDelta(delta))