我正在使用Ace编辑器v.1.1.8和ext-language_tools。 我希望通过自动完成实现以下行为:
用户开始输入,按下Ctrl + Space并向我显示找到的标题列表,当他选择其中一个插入值时。
我的代码:
var completions = [
{id: 'id1', 'value': 'value1'},
{id: 'id2', 'value': 'value2'}
];
var autoCompleter = {
getCompletions: function(editor, session, pos, prefix, callback) {
if (prefix.length === 0) {
callback(null, []);
return;
}
callback(
null,
completions.map(function(c) {
return {value: c.id, caption: c.value};
})
);
}
};
editor.setOptions({
enableBasicAutocompletion: [autoCompleter],
enableLiveAutocompletion: false,
enableSnippets: false
});
所以我需要的是,用户输入' val',看到列表中有' value1'和' value2',选择其中一个和' id1'或者' id2'插入编辑器。
此时:
以下是工作代码:http://plnkr.co/edit/8zAZaLpZVhocHmI4GWhd?p=preview
UPD:
能够通过向数据添加insertMatch方法来实现此行为:
completions.map(function(c) {
return {
value: c.name,
meta: c.id,
completer: {
insertMatch: function(editor, data) {
if (editor.completer.completions.filterText) {
var ranges = editor.selection.getAllRanges();
for (var i = 0, range; range = ranges[i]; i++) {
range.start.column -= editor.completer.completions.filterText.length;
editor.session.remove(range);
}
}
editor.execCommand("insertstring", data.meta);
}
}
};
})
答案 0 :(得分:0)
您可以更改
var caption = item.value || item.caption || item.snippet;
在https://github.com/ajaxorg/ace/blob/v1.1.8/lib/ace/autocomplete.js#L449到
行var caption = item.caption || item.value || item.snippet;
您还可以在完成https://github.com/ajaxorg/ace/blob/v1.1.8/lib/ace/autocomplete.js#L181上实现自定义insertMatch方法,但使用第一个选项进行拉取请求更好