我在代码镜像中有一点困难的自动完成功能.我想要做的是两件事(我正在努力解决):
1)我想启用自动完成两个HTML和JavaScript.目前我只能使用以下方式一次工作:
CodeMirror.commands.autocomplete = function (cm) {
CodeMirror.showHint(cm, CodeMirror.hint.html);
};
Run Code Online (Sandbox Code Playgroud)
如何CodeMirror.hint.javascript从列表中添加列表HTML?
2)(更重要的一种) - 如何将自定义变量添加到HTML从ajax调用中检索的区域的提示列表.....
即我想让下拉显示来自html提示的当前数据列表,但随后添加自定义条目,如##SomeCode1##和##SomeCode2##
我这里有两个问题.首先,当我尝试对'html-hint.js'文件中的值进行硬编码时,所有值都会附加<...这不是我想要的.
第二个问题是,我认为我必须写一个新的'html-hint.js'文件正确吗?我的意思是没有办法在上面的'options'参数中传递任何东西CodeMirror.hint.html,基本上合并两个列表.
我和客人一两个都有同样的想法......将两个值列表合并为一起自动完成.
我猜测框架中已经没有任何内容,我必须编写自定义提示文件,对吗?
任何指针将不胜感激.示例代码非常棒.
Mar*_*ijn 20
如果你没有指定提示函数,show-hint addon将采用为完成发生的本地模式定义的提示辅助函数,因此它将CodeMirror.hint.javascript在JavaScript代码和CodeMirror.hint.htmlHTML中.
如果您需要添加自己的完成逻辑,可以通过使用自己的代码覆盖它们来替换(或换行)这些函数.
这是一个粗略的示例黑客,总是将"bozo"添加到JavaScript完成:
var orig = CodeMirror.hint.javascript;
CodeMirror.hint.javascript = function(cm) {
var inner = orig(cm) || {from: cm.getCursor(), to: cm.getCursor(), list: []};
inner.list.push("bozo");
return inner;
};
Run Code Online (Sandbox Code Playgroud)
感谢@Marjin的简要解释,但由于它不包括过滤而且很多人都需要它,这是我在mongoclient中通过遵循Marjin的答案所做的.并从这里部分得到了帮助
ps不要忘记改变你的提示,因为我正在使用javascript我已经改变了javascript提示.
CodeMirror.hint.javascript = function (editor) {
var list = Session.get(Template.strSessionDistinctFields) || [];
var cursor = editor.getCursor();
var currentLine = editor.getLine(cursor.line);
var start = cursor.ch;
var end = start;
while (end < currentLine.length && /[\w$]+/.test(currentLine.charAt(end))) ++end;
while (start && /[\w$]+/.test(currentLine.charAt(start - 1))) --start;
var curWord = start != end && currentLine.slice(start, end);
var regex = new RegExp('^' + curWord, 'i');
var result = {
list: (!curWord ? list : list.filter(function (item) {
return item.match(regex);
})).sort(),
from: CodeMirror.Pos(cursor.line, start),
to: CodeMirror.Pos(cursor.line, end)
};
return result;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17310 次 |
| 最近记录: |