Совершенно новый для ace editor dev динамически добавлять дополнительные правила в файл режима для подсветки синтаксиса. Я делаю вызов ajax, который устанавливает глобальную переменную, доступную внутри файла режима для обработки.
Вот настройка и начальный вызов ajax:
var editor = ace.edit("editor");
$.ajax({
url: "json-mode-rules.php",
dataType: "json"
}).done(function(data) {
window.myModeRules=data; // ("foo","bar","etc")
editor.getSession().setMode("ace/mode/python");
});
Файл режима исправлен следующим образом:
// keywords has already been initialised as an array
// e.g. var keywords = ("and|as|assert...etc")
var extraRules=window.codebenderModeLibrary["myModeRules"].join("|");
keywords=(keywords[0]+"|"+ extraRules);
Когда страница загружается изначально, редактор ace выделяет все ключевые слова для подсветки синтаксиса. Это прекрасно работает.
Проблема в том, что у нас есть правила, изменяющиеся при возникновении определенных событий, и мы хотели бы, чтобы редактор ace обновлял свои правила синтаксиса.
Повторный вызов ajax и вызов setMode ничего не делают - это связано с тем, что js не перезагружает файл.
Я разместил проблему на GitHub без решения:
https://github.com/ajaxorg/ace/issues/1835
«Если вы действительно хотите сохранить глобальную переменную, вы можете обернуть все в функцию, вызвать эту функцию, чтобы получить обновленный конструктор режима, а затем вызвать setMode (новый режим)».
Я не знаю, как это сделать, и любая помощь будет оценена по достоинству.
У кого-нибудь есть методы динамического обновления правил подсветки синтаксиса редактора ace?