我可以在Ace Editor中禁用完成过滤吗?

时间:2017-11-08 18:45:39

标签: javascript ace-editor

This plunker使用押韵词典进行自动完成。

var langTools = ace.require("ace/ext/language_tools");
var editor = ace.edit("editor");
editor.setOptions({enableBasicAutocompletion: true});
// uses http://rhymebrain.com/api.html
var rhymeCompleter = {
    getCompletions: function(editor, session, pos, prefix, callback) {
        if (prefix.length === 0) { callback(null, []); return }
        $.getJSON(
            "http://rhymebrain.com/talk?function=getRhymes&word=" + prefix,
            function(wordList) {
                // wordList like [{"word":"flow","freq":24,"score":300,"flags":"bc","syllables":"1"}]
                callback(null, wordList.map(function(ea) {
                    return {name: ea.word, value: ea.word, score: ea.score, meta: "rhyme"}
                }));
            })
    }
}
langTools.addCompleter(rhymeCompleter);

例如,输入“trace”并点击ctrl-space,只弹出一些建议(回扫,隔行扫描,界面)。

押韵字典实际上提出了许多其他匹配,并且它们被传递给回调,但是内部Ace过滤掉它们因为它们不包含字母“t”,“r”,“a”,“c”和“e”。有没有办法绕过该过滤器,以便它建议传递给回调的所有内容?

1 个答案:

答案 0 :(得分:1)

Autocompletion在autocompleter文件中通过ace过滤。但是你可以设置insertMatch来避免这个过滤器,

insertMatch: function(editor, data) {
    editor.completer.insertMatch({value: data.value})
});

您可以通过以下方式更新回调函数:

callback(null,
  wordList.map(function (word) {
             return {
                caption: word,
                value: word,
                    completer: {
                        insertMatch: function (editor, data) {
                            editor.completer.insertMatch({value: data.value})
                        }
                   }
   }