javascript - Codemirror 自动完成和自动右括号不会触发更改事件

标签 javascript node.js autocomplete codemirror

我遇到以下问题。我为 Node.js 编写了一个服务器和客户端脚本,用作实时协作代码编辑。 2 个或更多人可以在 CodeMirror 编辑器的同一个实例中进行编码。在我启用自动完成功能和自动结束括号之前,它工作得很好,但在我完成之后,它搞砸了工作。当您使用自动完成列表或当括号或标签将由模块关闭而不是由您手动关闭时,它将不会被识别为更改。我检查了 CodeMirror 实例返回的对象,它不包含已自动完成的更改。对于 Node js 来说,这甚至不是严格的问题,因为如果您想要通过 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);
        });
    };
});

最佳答案

您明确过滤掉来源不是输入/粘贴/删除之一的更改。你为什么要这么做?如果您希望对等点保持同步,您需要传播所有更改。

关于javascript - Codemirror 自动完成和自动右括号不会触发更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31596618/

相关文章:

autocomplete - 当我按分号和空格时,如何禁用 sublime 中弹出的自动完成功能;

jquery - 将多个输入字段与rails3-jquery-autocomplete一起使用

javascript - 为手机、平板电脑等构建响应式网页

javascript - 带复选框的 mootools 模态框

javascript - Extjs多重继承?

javascript - JSON 对象重组建议?

javascript - 如何在 Node js中将主机名解析为IP地址

node.js - 如何从 Sequelize 模型中获取模式名称?

javascript - 如何在登录后重定向到页面,同时使用 Express 将 token 作为处理程序发送到中间件

javascript - ACE 编辑器自动完成工具提示