【问题标题】:How to subscribe to select events in CodeMirror with show-hint plugin?如何使用 show-hint 插件订阅 CodeMirror 中的选择事件?
【发布时间】:2015-02-17 17:35:17
【问题描述】:

我想在用户浏览自动完成建议时显示一些附加信息。 documentaion 中有一些关于 select 事件的内容,但如果可能的话,我无法找到如何订阅它。

有人可以建议如何订阅该活动吗?或任何其他方法来检测当前选择了哪个并检测何时更改?

对此有几个问题,但我找不到任何解决方案。

【问题讨论】:

    标签: javascript autocomplete codemirror


    【解决方案1】:

    这些事件不会在内部完成对象上触发,该对象通常在提示提供者之外不可用,因此不能直接订阅。

    无论如何,如果你真的想订阅这些事件,你必须覆盖提示提供者。例如,

    // Some other code defined CodeMirror.hint.foo
    
    var fooHint = CodeMirror.hint.foo;
    CodeMirror.hint.foo = function(cm, options) {
        var result = fooHint(cm, options);
        if (result) CodeMirror.on(result, "pick", function() { /* ... */ });
        return result;
    };
    

    https://github.com/codemirror/CodeMirror/issues/3092。感谢 marijnh 的解决方案。

    【讨论】:

    • syntax error/typo: last ) 上面示例代码中必须省略
    • 代码中的一个bug:一定是“.....function(a) { console.log(a.text) });”显示选择的项目
    • 语法错误现已修复。另一次取决于使用代码的人以及他们想用它做什么,不是吗?
    • 注意额外的参数 a 定义。休息只是你可以用它做什么的一个例子。
    【解决方案2】:

    事件在完成数据对象上触发,可以像这样附加到。

    extraKeys: {
        "Ctrl-Space": function(cm) { 
            hintFunction(cm);
            var completion = cm.state.completionActive.data;
            CodeMirror.on(completion, 'select', function(completion, element) {
                console.log('huh');
            })
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-16
      • 2020-10-12
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多