Динамически обновлять правила режима подсветки синтаксиса для Ace Editor

Абсолютно новый для 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

«Если вы действительно хотите сохранить глобальную переменную, вы можете обернуть все в функцию, вызвать эту функцию, чтобы получить обновленный конструктор Mode, а затем вызвать setMode (new Mode)».

Я не знаю, как это сделать, и любая помощь будет оценена.

Кто-нибудь с методами, как динамически обновлять правила подсветки синтаксиса редактора ace?

Ответы на вопрос(1)

Ваш ответ на вопрос