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

时间:2015-05-28 08:22:57

标签: javascript ace-editor

我在使用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 texteditor.session.remove //remove text 或(目前),对于新行self.editor.insertNewLine(range.end.row, line);

问题是,从服务器更新的客户端计算机没有正确选项卡,这会导致其编辑器不同步。

问题

我向你们提出的问题是,ace.js编辑器的格式是否为'功能?我尝试了editor.indent函数,但似乎没有正常工作。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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

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