Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Codemirror自动完成和自动关闭括号不会触发更改事件_Javascript_Node.js_Autocomplete_Codemirror - Fatal编程技术网

Javascript Codemirror自动完成和自动关闭括号不会触发更改事件

Javascript Codemirror自动完成和自动关闭括号不会触发更改事件,javascript,node.js,autocomplete,codemirror,Javascript,Node.js,Autocomplete,Codemirror,我有以下问题。我已经为node js编写了一个服务器和客户端脚本,可以作为实时协作代码编辑。2个或更多人可以在CodeMirror editor的同一实例中编码。在我启用自动完成功能和自动关闭括号之前,它工作得非常完美,但在我启用之后,它把工作搞砸了。当您使用自动完成列表或括号或标记将由模块而不是您手动关闭时,它将不会被识别为更改。我检查了CodeMirror实例返回的一个对象,它不包含自动完成的更改。对于NodeJS来说,这甚至不是严格意义上的问题,因为如果您想通过ajax将更改发送到服务器并

我有以下问题。我已经为node js编写了一个服务器和客户端脚本,可以作为实时协作代码编辑。2个或更多人可以在CodeMirror editor的同一实例中编码。在我启用自动完成功能和自动关闭括号之前,它工作得非常完美,但在我启用之后,它把工作搞砸了。当您使用自动完成列表或括号或标记将由模块而不是您手动关闭时,它将不会被识别为更改。我检查了CodeMirror实例返回的一个对象,它不包含自动完成的更改。对于NodeJS来说,这甚至不是严格意义上的问题,因为如果您想通过ajax将更改发送到服务器并保存到文件中,这不会发生,因为它不存在于更改对象中。有人有类似的问题,可以帮忙吗

客户端代码:

    var appCM = CodeMirror.fromTextArea(document.getElementById('app-cm'), {
        mode: 'text/html',
        theme: "monokai",
        styleActiveLine: true,
        lineNumbers: true,
        matchBrackets: true,
        indentUnit: 4,
        indentWithTabs: true,
        autoCloseTags: true,
        autoCloseBrackets: true,
        matchTags: false,
        extraKeys: {
            "Ctrl-Space": "autocomplete",
            "Ctrl-Q": function(appCM) {
                appCM.foldCode(appCM.getCursor());
            }
        },
        foldGutter: true,
        gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
        readOnly: access
    });

        appCM.on('change', function(i, op) {
            socket.emit('change', op);
        });

        socket.on('change', function(data) {
            appCM.replaceRange(data.text, data.from, data.to);
        });
服务器代码:

socket.on('change', function(op) {
    if(op.origin === '+input' || op.origin === 'paste' || op.origin === '+delete') {
        clients.forEach(function(client) {
            if(client !== socket)
                client.emit('change', op);
        });
    };
});

您正在明确筛选出源不是输入/粘贴/删除的更改。你为什么这么做?如果希望对等方保持同步,则需要传播所有更改。

您正在明确筛选出来源不是输入/粘贴/删除的更改。你为什么这么做?如果希望对等方保持同步,则需要传播所有更改。

您正在明确筛选出来源不是输入/粘贴/删除的更改。你为什么这么做?如果希望对等方保持同步,则需要传播所有更改。

您正在明确筛选出来源不是输入/粘贴/删除的更改。你为什么这么做?如果你想让同事保持同步,你需要传播所有更改。

谢谢你让我进入正确的轨道,当我添加这些问题解决时谢谢你让我进入正确的轨道,当我添加这些问题解决时谢谢你让我进入正确的轨道,当我添加这些问题解决时谢谢你让我进入正确的轨道,当我添加时,这些问题已经解决