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

Javascript Ace.js以编程方式添加新行,javascript,ace-editor,Javascript,Ace Editor,我很难用javascript以编程方式插入新行 让我告诉你一些我的项目。首先,它是一个在线协作IDE,使用ACE.JS和signer,允许多人进行近实时编辑 为了实现这一点,我已连接到ace.js编辑器更改事件: editor.getSession().on('change', function (e) {}); 然后,我听用户执行的操作,并使用switch语句相应地执行操作。因此,on change事件如下所示 editor.getSession().on('change', func

我很难用javascript以编程方式插入新行

让我告诉你一些我的项目。首先,它是一个在线协作IDE,使用ACE.JS和signer,允许多人进行近实时编辑

为了实现这一点,我已连接到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(){
当用户点击enter时,代码块的格式如下:

function(){
    //indentation 
}
导致此情况的更改事件将发送到服务器,以便更新其他用户,服务器将根据用户操作在客户端计算机上调用函数。这可以是
editor.session.insert//add text
editor.session.remove//remove text
或者(当前),对于新行
self.editor.insertNewLine(range.end.row,line)

问题是,从服务器更新的客户端计算机没有正确地制表符,这会导致它们的编辑器不同步

问题

我的问题是,ace.js编辑器是否具有“格式”功能?我尝试了editor.indent函数,但似乎没有正常工作


任何帮助都将不胜感激。

在我的情况下,我的每一行都有一个由服务器生成的唯一隐藏整数,当更新时,我将该数字与字符串格式的行一起发送给所有客户端,其中包括缩进和换行。。。。。那条线的一切


此外,我还将这些行存储在sql中,这样当客户端脱机时,它将在再次联机时获得最新信息。

谢谢Kenneth,我相信我需要重新考虑发送给服务器的信息。但这似乎是最好的方法(让每个人都与服务器保持同步,不让编辑器假设输入)。谢谢。Jayremember可添加另一个隐藏号码、显示顺序,例如,如果用户在第2行和第3行之间添加一行