0

私は一日中この問題に悩まされてきました。ブラウザに 2 つの Ace Editor を並べて作成しました。右側のエディターは読み取り専用になり、左側のエディターをミラーリングするために使用されます。次に、いくつかの Socket.IO イベントをセットアップして、基本的に左側のエディターから右側のエディターに変更を送信します。何かを削除する場合を除いて、適切なエディターを更新するすべての機能は完全に機能しています。すべてを試したような気がしますが、最も近いのは、左側の何かを削除すると、右側の左上隅にある文字が削除されることです。

ここに私がこれまで持っているコードがあります。

      var oEditor = ace.edit("rightEditor");
      oEditor.setTheme("ace/theme/eclipse");
      oEditor.getSession().setUseWrapMode(true);
      oEditor.getSession().setMode("ace/mode/javascript");
      oEditor.setReadOnly(true);
      var socket = io.connect('http://localhost');
        socket.on('sendFirstChange', function(text){
          oEditor.getSession().setValue(text.val);
        })
        socket.on('sendChange', function (data) {
          if(data.data.action === 'insertText'){
            var start = data.data.range.start.column;
            var end = data.data.range.start.row;
            oEditor.getSession().insert({row: end, column: start},data.data.text);
          } else if(data.data.action === 'removeText'){
            oEditor.remove(); //this is where it's not working
          }
        });

何か案は?

本当にありがとう!

4

2 に答える 2

0

https://github.com/ajaxorg/ace/blob/master/lib/ace/worker/mirror.jsからミラー クラスを使用できます。

于 2013-09-13T04:47:14.643 に答える
0

*ユーザー様、Mirror Class ありがとうございます。昨夜これを理解しましたが、今日まで回答として投稿できませんでした。

うーん、やっと分かった気がします。これはアーカイブ用です。これが最も効率的かどうかはわかりませんが、右側のエディターのコードを微妙に置き換えようとする代わりに、左側のエディターのすべてのテキストを送信し、右側のエディターのすべてのコードを完全に置き換えています。かなりうまくいっているようです。

function(scope, ele, attrs) {   
      var oEditor = ace.edit("rightEditor");
      oEditor.setTheme("ace/theme/eclipse");
      oEditor.getSession().setUseWrapMode(true);
      oEditor.getSession().setMode("ace/mode/javascript");
      oEditor.setReadOnly(true);
      var socket = io.connect('http://localhost');
        socket.on('sendChange', function (data, text) {
          oEditor.getSession().setValue(text);
        });
      scope.oEditor = oEditor;
  }
于 2013-09-13T20:33:48.977 に答える