繁体   English   中英

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

[英]Ace.js Programmatically add a new line

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

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

为此,我已经加入了ace.js编辑器change事件:

  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.insert //add text editor.session.remove //remove text或者(当前),对于新行self.editor.insertNewLine(range.end.row, line);

问题是,从服务器更新的客户端计算机无法正确制表,这将导致其编辑器不同步。

问题

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

任何帮助将非常感激。

在我的情况下,我每行都有一个由服务器生成的唯一隐藏的整数,更新后,我将此数字连同包含缩进和换行符在内的字符串格式的行一起发送给所有客户端。线!

另外,我将这些行存储在sql中,以便当客户端脱机时,它将再次获得最新的联机状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM