【发布时间】:2014-04-05 16:23:26
【问题描述】:
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 编辑器语法高亮规则吗?
【问题讨论】:
标签: javascript requirejs syntax-highlighting ace-editor