2014-11-18 32 views
12

Używam edytora asów i włączam funkcję podstawową i wyciągam dane z innego serwera, aby uzyskać sugestie. Wszystko działa dobrze, ale chcę usunąć lokalne sugestie z pola sugestii.Autouzupełnianie edytora ACE usuń zmienne lokalne

Oto moja odpowiedni kod:

var langTools = ace.require("ace/ext/language_tools"); 
var editor = ace.edit("editor"); 

editor.setTheme("ace/theme/xcode"); 
var TextMode = require("ace/mode/text").Mode; 
editor.getSession().setUseWrapMode(true); 

editor.setOptions({ 
    enableBasicAutocompletion: true, 
}); 

var qtags = { 
getCompletions: function(editor, session, pos, prefix, callback) { 
    $.getJSON(jsonURL, 
    function(tagList) { 
     callback(null, tagList.map(function(qtag) { 
     return {name: qtag.name, value: "#"+qtag.name+"() ", meta: "qtag"} 
     })); 
    }) 
    } 
} 
langTools.addCompleter(qtags); 

Oto jak to wygląda:

Example

Próbowałem tę linię, aby usunąć wszystkie ukończyły przed dodaniem mój qtag Completer, ale to nie usuwa lokalnych zmiennych

langTools.completers = []; 

Dowolne wejście byłoby docenione, staram się uniknąć konieczności modyfikacji as/ext/language_tools.js jeśli to możliwe, ale w tym momencie jestem otwarty nawet na tę opcję.

Odpowiedz

13

Sztuką jest, aby zadzwonić langTools.setCompleters([])przed nazywając editor.setOptions({enableBasicAutocompletion: true});. Dobrym pomysłem jest ustawienie tej opcji jawnie na false przed ustawieniem lub dodaniem Completerów. Nie ma potrzeby zmiany kodu źródłowego language_tools.

Przykład:

var langTools = ace.require("ace/ext/language_tools"); 
var editor = ace.edit("editor"); 

editor.setTheme("ace/theme/xcode"); 
var TextMode = require("ace/mode/text").Mode; 
editor.getSession().setUseWrapMode(true); 

var qtags = { 
    getCompletions: function(editor, session, pos, prefix, callback) { 
    $.getJSON(jsonURL, 
     function(tagList) { 
     callback(null, tagList.map(function(qtag) { 
      return {name: qtag.name, value: "#"+qtag.name+"() ", meta: "qtag"} 
     })); 
    }) 
    } 
} 

langTools.setCompleters([qtags]); 

editor.setOptions({ 
    enableBasicAutocompletion: true, 
}); 
+0

Tak, to działało również dla mnie. Dziękuję Ci –

5

można użyć langTools.setCompleters

langTools = require("ace/ext/language_tools") 
langTools.setCompleters([langTools.snippetCompleter, langTools.textCompleter]) 

lub editor.completers = [langTools.snippetCompleter, langTools.textCompleter, qtags]

+0

Próbowałem, ale to, co jest mi potrzebne tylko qtags, bez reszty z nich. W każdym razie, wciąż używając rozwiązania obejścia, usuwając wszystko bezpośrednio z ace/ext/language_tools, a następnie dodając tylko qtags w moim własnym javascript jako kompletny. –

+1

tylko qtags jest jeszcze łatwiejsze wywołanie 'langTools.setCompleters ([qtags])', zauważ, że potrzebujesz v1.1.8, aby to działało. –