2014-11-18 2 views
12

Я использую редактор ace, и я включил basicautocompletion, и я извлекаю данные с другого сервера, чтобы получить предложения. Все работает нормально, но я хочу удалить локальные предложения из предложения.Автозаполнение редактора ACE удаляет локальные переменные

Вот мой соответствующий код:

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); 

Вот как это выглядит:

Example

Я пробовал эту линию, чтобы удалить все завершившие перед добавлением моего qtag завершающего, но что не удаляет локальные переменные

langTools.completers = []; 

Любой вход был бы оценен, я стараюсь избегать необходимости изменять ace/ext/language_tools.js, если это возможно, но на данный момент я открыт даже для этой опции.

ответ

13

Хитрость заключается в том, чтобы позвонить langTools.setCompleters([])перед тем вызова editor.setOptions({enableBasicAutocompletion: true});. Может быть, это хорошая идея, чтобы установить эту опцию в явном виде на false перед настройкой или добавлением Completers. Нет необходимости изменять исходный код language_tools.

Пример:

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

Да, это сработало и для меня, и раньше. спасибо –

5

вы можете использовать langTools.setCompleters

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

или editor.completers = [langTools.snippetCompleter, langTools.textCompleter, qtags]

+0

Я пробовал это, но то, что мне нужно, это только qtags, без остальных. В любом случае, все еще используя обходное решение, удалив все прямо из туза/ext/language_tools, а затем добавив только qtags в мой собственный javascript как дополнение. –

+1

только qtags еще проще вызвать 'langTools.setCompleters ([qtags])', обратите внимание, что для этого вам нужно v1.1.8. –