我正在使用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
,则会完全忽略这些选项。他们永远不会通过。
那么如何通过选项呢?我很困惑。
答案 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});
});
这对我有用。