【发布时间】:2014-05-16 20:41:09
【问题描述】:
我正在使用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
});
}
但这不起作用 - 事实上,选项似乎根本没有通过。如果我在show-hint.js 中执行console.log,则这些选项将被完全忽略。他们永远无法通过。
那么我怎样才能通过选项?我很困惑。
【问题讨论】:
标签: css autocomplete codemirror