将关键字导入Webpy服务器(python)中的ace编辑器荧光笔中

Import keywords into ace editor highlighter in webpy server (python)

本文关键字:ace 中的 编辑器 荧光笔 python 导入 关键字 Webpy 服务器      更新时间:2023-09-26

我正在使用Javascript Ace文本编辑器,需要将关键字加载到(DynHighlightRules)中以突出显示导入的关键字。我在

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

,但我需要在渲染编辑器后导入新规则。我找到了一个很好的解决方案,它在Apache服务器中完美运行,但在 Web.py python服务器中则不然。我相信这是由于模板页面不在服务器的根级别。有没有人在 Webpy 中部署了 Ace 编辑器并解决了这个问题?

好的,我找到了解决问题的方法。这是一种解决方法,而不是我最初解决问题的方式。我的第一次尝试是在"ace.define"函数中嵌入一个ajax调用,但它无法正确处理它,并且部分会丢失导致错误。然后我尝试动态导入关键字,但无法在 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;
                });
}

});