我在使用javascript以编程方式插入新行时遇到了一些困难。
让我告诉你一些我的项目。首先,它意味着成为一个使用ACE.JS和SignalR的在线协作IDE,允许多人实时编辑。
为了达到这个目的,我已经加入了ace.js编辑改变事件:
editor.getSession().on('change', function (e) {});
然后我听取用户执行的操作并使用switch语句相应地执行操作。所以on change事件看起来像这样
editor.getSession().on('change', function (e) {
console.log(self.fromserver);
if (self.wasMe) {
self.wasMe = false;
return;
}
switch(e.data.action) { //what action did this user perform?
case "insertText":
if (!self.fromserver) {//to prevent an 'n' event loop, check if event came from server
} else {
}
break;
case "insertLines":
if (!self.fromserver) {
} else {
}
break;
case "removeText":
var position = JSON.stringify(e.data.range);
if (!self.fromserver) {
self.ide.server.removeSyntax(position);
} else {
self.fromserver = false;
}
break;
case "removeLines":
var lines = JSON.stringify(e.data.range);
if (!self.fromserver) {
self.ide.server.removeLines(lines);
}
break;
}
self.fromserver = false;
console.log(e.data);
});
插入文本,粘贴文本和删除文本(以及删除文本块)都能正常工作。
问题
带缩进的新行!例如,用户键入了以下代码:
function(){
当用户点击进入时,代码块的格式如下:
function(){
//indentation
}
导致此问题的更改事件将发送到服务器,以便更新其他用户,服务器根据用户操作调用客户端计算机上的功能。这可以是editor.session.insert //add text
或editor.session.remove //remove text
或(目前),对于新行self.editor.insertNewLine(range.end.row, line);
问题是,从服务器更新的客户端计算机没有正确选项卡,这会导致其编辑器不同步。
问题
我向你们提出的问题是,ace.js编辑器的格式是否为'功能?我尝试了editor.indent函数,但似乎没有正常工作。
非常感谢任何帮助。
答案 0 :(得分:1)
在我的情况下,我每行都有一个由服务器生成的唯一隐藏整数,当更新时,我将此号码与字符串格式的行一起发送给所有客户端,其中包括缩进和换行.....那条线的一切!
另外,我将这些行存储在sql中,这样当客户端离线时,它会在再次联机时获得最新版本。