CodeMirror - 自动完成“选项”未设置正确

时间:2014-03-27 20:56:42

标签: css autocomplete codemirror

我正在使用CodeMirror并尝试对自动完成功能弹出一些CSS样式。这有点困难,因为当我去检查样式和东西时,我需要它不会消失。

所以我想要一种方法来做到这一点。我在show-hint.js

中找到了此代码
if (options.closeOnUnfocus !== false) {
    var closingOnBlur;
    cm.on("blur", this.onBlur = function () { closingOnBlur = setTimeout(function () { completion.close(); }, 100); });
    cm.on("focus", this.onFocus = function () { clearTimeout(closingOnBlur); });
}

如果我对此进行评论,那么当我点击其他内容时,弹出的自动完成功能不会消失;这就是我想要的。但是我想我会更多地探索这个并尝试确定如何随意打开和关闭它。

所以我希望能够自己设置这个closeOnUnfocus选项。这似乎很简单。

但是,我找不到办法做到这一点。进一步探索我在代码镜像的网站上找到了一个示例,演示了使用以下代码设置自动完成系统的方法;

  CodeMirror.commands.autocomplete = function(cm) {
    CodeMirror.showHint(cm, CodeMirror.hint.anyword);
  }

进一步探索,show-hint.js从一个名为showHint的函数开始,该函数具有此签名;

CodeMirror.showHint = function (cm, getHints, options) {
    // We want a single cursor position.
    if (cm.somethingSelected()) return;
    if (getHints == null) {
        if (options && options.async) return;
        else getHints = CodeMirror.hint.auto;
    }

    if (cm.state.completionActive) cm.state.completionActive.close();

    var completion = cm.state.completionActive = new Completion(cm, getHints, options || {});
    CodeMirror.signal(cm, "startCompletion", cm);
    if (completion.options.async)
        getHints(cm, function (hints) { completion.showHints(hints); }, completion.options);
    else
        return completion.showHints(getHints(cm, completion.options));
};

好的,所以我可以通过在这里通过我的选项来完成我想要的事情。像这样...

CodeMirror.commands.autocomplete = function (cm) {
    CodeMirror.showHint(cm, CodeMirror.hint.anyword, {
        closeOnUnfocus: false
    });
}

但这并不起作用 - 事实上,似乎选项根本没有通过。如果我在console.log中执行show-hint.js,则会完全忽略这些选项。他们永远不会通过。

那么如何通过选项呢?我很困惑。

3 个答案:

答案 0 :(得分:4)

如果要更改提示菜单的样式,只需使用提供的CSS挂钩即可。没有必要乱搞自动完成处理程序。 e.g:

.CodeMirror-hints {
    background-color: red;
}
.CodeMirror-hint {
    background-color: green;
}
.CodeMirror-hint-active {
    background-color: blue;
    color: yellow;
}

这是一个实时Demo

答案 1 :(得分:0)

我刚刚开始使用Codemirror(v4.1),我发现了同样的问题。检查show-hint.js内容后,似乎没有更新文档。

如果您想获得建议,请尝试编写此内容:

CodeMirror.showHint({hint: CodeMirror.hint.deluge, completeSingle: false, closeOnUnfocus: true});

如果您需要使用异步模式获取建议(这是我的情况),现在您必须在上一个代码段之前执行此操作:

CodeMirror.hint.deluge.async = true;

希望这有帮助!

答案 2 :(得分:-1)

您可以传递以下选项:

CodeMirror.showHint(cm,CodeMirror.hint.anyword,{completeSingle: false,closeOnUnfocus:false});

您可以按如下方式编写代码:

editor.on("keyup",function(cm){ 
    CodeMirror.showHint(cm,CodeMirror.hint.deluge,{completeSingle: false});
  });

这对我有用。