Ace.js 以编程方式添加新行

Ace.js Programmatically add a new line

我在使用 javascript 以编程方式插入新行时遇到了一些困难。

让我向您介绍一下我的项目。首先,它是一个在线协作 IDE,使用 ACE.JS 和 SignalR 允许多人进行近乎实时的编辑。

为了实现这一点,我加入了 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 texteditor.session.remove //remove text 或(当前),对于新行 self.editor.insertNewLine(range.end.row, line);

问题是,从服务器更新的客户端机器不能正确切换,这会导致它们的编辑器变得不同步。

问题

请问各位,ace.js编辑器有'format'功能吗?我尝试了 editor.indent 功能,但它似乎无法正常工作。

如有任何帮助,我们将不胜感激。

在我的例子中,我的每一行都有一个由服务器生成的唯一隐藏整数,更新时,我将这个数字连同包括缩进和换行符在内的字符串格式的行发送给所有客户端... .. 该行的所有内容!

此外,我将这些行存储在 sql 中,这样当客户端离线时,它会在再次在线时获得最新的。