Импортировать ключевые слова в подсветку редактора ace на сервере webpy (python)

Я использую текстовый редактор Javascript Ace, и мне нужно загрузить ключевые слова в (DynHighlightRules), чтобы выделить импортированные ключевые слова. У меня есть основные моменты, работающие со статическими ключевыми словами в

editor.getSession().setMode("ace/mode/highlightRules")

, но мне нужно импортировать новые правила после рендеринга редактора. Я нашел отличное решение, которое отлично работает на сервере Apache, но не на сервере Python Web.py. Я считаю, что это связано с тем, что страница шаблона не находится на корневом уровне сервера. Кто-нибудь развернул редактор Ace в Webpy и решил эту проблему?


person Mark Bellamy    schedule 11.12.2014    source источник
comment
Если что-то работает на сервере Apache, но не работает на сервере python, это должно быть вызвано тем, как вы настроили свой сервер. Постарайтесь рассказать об этом подробнее, иначе на этот вопрос невозможно ответить.   -  person a user    schedule 12.12.2014
comment
Сервер python имеет базовую страницу python, которая вызывает страницу index.html в подпапке с именем templates. В результате все, что находится в шаблонах, находится на один каталог глубже, чем в обычной ситуации, поэтому все относительные пути не соответствуют местоположению, в котором они должны находиться. Я не фанат Web.py, но я должен использовать его для этого проекта. Пример кода, который я нашел и начал работать в apache, имеет вызовы, встроенные в html-страницу, что вызывает проблему относительного пути. Код находится по адресу jsbin.com/ojijeb/445/edit?html,output   -  person Mark Bellamy    schedule 17.12.2014
comment
вы можете использовать ace.config.set(basePath, some/path), чтобы изменить место, где ace ищет файлы   -  person a user    schedule 19.12.2014


Ответы (1)


Хорошо, я нашел решение своей проблемы. Это обходной путь, а не тот способ, которым я изначально собирался решить проблему. Мои первые попытки заключались в том, чтобы встроить вызов ajax в функцию «ace.define», но она не обрабатывала его правильно, и некоторые части отсутствовали, вызывая ошибки. Затем я попытался динамически импортировать ключевые слова, но не смог заставить это работать в среде Python. Наконец, я решил просто обернуть все это успехом вызова ajax, и теперь он работает точно правильно. Я предполагаю, что при внедрении в функцию ace синхронизация между событиями ajax и другими частями определения была несинхронизированной.

Таким образом, ответ вкратце состоит в том, чтобы обернуть все определение в обратный вызов успеха ajax.

$.ajax({
            url: "/readUserCreatedKeywords",
            type: "POST",
            success: function(response){
                var keywordsString = "";
                var tmpArr = response.split(",");
                var tmpArrLen = tmpArr.length;
                var s = 0;
                var halfNum = 0;
                while (s < tmpArrLen) { // Clean array and save keywords and args into respective arrays
                    halfNum = parseInt(s/2);
                    tmpArr[s] = tmpArr[s].replace("u'", "").replace("[", "").replace("'", "").replace("(u", "").replace(")", "").replace("]", "").replace("(", "").replace(" ", "");

                    if (s % 2 == 0){ //Store even values in keywords
                       keywordsString += tmpArr[s] + "|";
                       //console.log("tmpArr[" + s + "]" + tmpArr[s]);
                    }
                    s++;
                }

                ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
                ...............................................lots of code..........................................

                exports.Mode = Mode;
                });

}

});

person Mark Bellamy    schedule 17.12.2014