2016-03-21 6 views
1

Ich versuche Ace Editor Unterstützung Autocomplete für meine eigene Abfragesprache zu machen.Ace Editor Autocomplete - zwei Schritte Autocomplete

Die Abfrage selbst ist so etwas wie unten

city:newyork color:red color:blue 

In obigem Fall erwarte ich, dass der Benutzer sehen kann ‚Stadt‘ und ‚Farbe‘, wenn ‚c‘ eingeben. Und nachdem er "Farbe" ausgewählt hat, kann er direkt die beiden Optionen "rot" und "blau" in der Vorschlagsliste sehen.

Ich überprüft alle Argumente von getCompletions: Funktion (Editor, Sitzung, Pos, Präfix, Rückruf). Aber ich kann immer noch nicht den besseren Weg finden, dies zu tun. Jeder Vorschlag wird geschätzt.

Antwort

0

Es ist nicht möglich, direkt oder durch Ace-Editoren standardmäßig automatisch abzuschließen. Aber ich habe Beispielcode, der Ihre Anforderung voll erfüllen kann. Schritt-1: Sie müssen Editor Objekt und Optionen erstellen:

ace.require("ace/ext/language_tools"); 
    var editor = ace.edit('div_id'); 
    editor.setTheme("ace/theme/textmate"); 
    editor.getSession().setMode("ace/mode/yaml"); 
    editor.getSession().setTabSize(4); 
    editor.getSession().setUseSoftTabs(true); 
    editor.setDisplayIndentGuides(true); 
    editor.setShowInvisibles(true); 
    editor.setShowPrintMargin(false); 
    editor.setOption("vScrollBarAlwaysVisible", true); 
    editor.setOptions({ 
     enableBasicAutocompletion: true, 
     enableLiveAutocompletion: true 
    }); 


var EditorWordCompleter = { 
    getCompletions: function(editor, session, pos, prefix, callback) { 
     getWordList(editor, session, pos, prefix, callback); 
     } 
    } 

var getWordList = function(editor, session, pos, prefix, callback) { 
    var wordList = []; 
    if(prefix === 'T') { 
     wordList.push('List of tasks'); 
    } 
    wordList = $.unique(wordList); 
    callback(null, wordList.map(function(word) { 
     return { 
      caption: word, 
      value: word 
     }; 
    })); 
} 

Bitte ändern wie pro Sie Anforderungen sind.