【问题标题】:How can I get/apply change delta in Ace editor?如何在 Ace 编辑器中获取/应用更改增量?
【发布时间】:2013-09-19 21:00:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript ace-editor


    【解决方案1】:

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

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

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

    【讨论】:

    • applyDeltas([e.data]);deltas = new Array(); 看起来像 php:)
    【解决方案2】:

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

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

    或者,在更现代的 JavaScript 中

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

    【讨论】:

    • 很棒的建议 + 仅供参考,第一个 sn-p 上缺少 )
    • @programmingisphun 谢谢,已修复。我最近写的python太多了,我的大括号变得懒惰了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多