我整天都被困在这个问题上。我在浏览器中并排创建了两个Ace编辑器。正确的编辑器是只读的,用于镜像左编辑器。然后,我设置了一些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
}
});
有什么想法吗?
非常感谢!
答案 0 :(得分:0)
答案 1 :(得分: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;
}