【问题标题】:Ace Code Editor Set Language Dynamically [closed]Ace 代码编辑器动态设置语言 [关闭]
【发布时间】:2014-04-24 19:35:46
【问题描述】:

我正在尝试使用下拉菜单来选择语言来实现 Ace 代码编辑器。我的下拉菜单有一个模式 id。我已经让编辑器正常工作,但我无法按照我的意愿使用下拉菜单更改语言。我当前的代码是

var editor = ace.edit("code");
var textarea = $('textarea[name="code"]').hide();
editor.setTheme("ace/theme/textmate");
editor.getSession().setMode("ace/mode/sql");
editor.getSession().setValue(textarea.val());
editor.getSession().on('change', function(){
textarea.val(editor.getSession().getValue());
});

$('#mode').on('change', function(){
var newMode = $("mode").val();
editor.session().setMode({
    path: "ace/mode/" + newMode,
    v: Date.now()});
});

如上所述,这成功启动了编辑器,但是我无法从 SQL 更改语言,这是初始语言。我遇到了这个问题Dynamically update syntax highlighting mode rules for the Ace Editor 这就是我加入的原因

v: Date.now()

但仍然没有运气。

【问题讨论】:

    标签: javascript jquery syntax-highlighting ace-editor


    【解决方案1】:

    editor.session().setMode({ 行中有错字

    使用editor.session.setMode("ace/mode/" + newMode) 代替它。

    需要v: Date.now() 来禁用缓存,您很可能不需要它。

    【讨论】:

    • 谢谢,效果很好。我收到第二个错误 newMode 未定义,因此为了解决这个问题,我更改了 var newMode = $("mode").val(); to var newMode = $(this).val();
    • 记得确保你的编辑器变量是全局变量,浪费了一些时间试图弄清楚为什么这对我不起作用,直到我发现它是一个本地变量
    【解决方案2】:

    这是正确的 editor.getSession().setMode("ace/mode/" + newMode);

    但是你输入的是 editor.session 而不是 editor.getSession()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      相关资源
      最近更新 更多