如何在遇到特定表达式时在codemirror中动态更改模式?

时间:2014-07-29 11:18:13

标签: html text-editor freemarker codemirror

在textarea每当'<'遇到的模式应该是html和'<#'或者'< @'或者' $',模式应为ftl。在我写的代码中

function determineCodeMirrorType(cm) {
  if (cm.getOption('mode') == 'text/ftl') {
    checkAndSwitchToHTML(cm, cm.getValue());
  } else if (cm.getOption('mode') == 'text/html') {
    checkAndSwitchToFTL(cm, cm.getValue());
  }
}

function checkAndSwitchToHTML(cm, val) {
  if (/^\s*</.test(val)) {
    cm.setOption("mode", "text/html");
  }
}

function checkAndSwitchToFTL(cm, val) {
  if (/[<#|<@|$]/.test(val)) {
    cm.setOption("mode", "text/ftl");
  }
}

function buildCMInstance(mode, value) {
  var cm = CodeMirror.fromTextArea(document.getElementById("code"), {
    mode:mode,
    value:value,
    lineNumbers:true,
    onChange:function(cmInstance){ 
      determineCodeMirrorType(cmInstance); //The call to this function is not made.
    })
  });
  return cm;
}

$(document).ready(function(){
  var cm = buildCMInstance("text/ftl")
});

我想知道是否有任何可以启动的选项允许代码通过调用函数来动态更改&#34; determineCodeMirrorType&#34;。

1 个答案:

答案 0 :(得分:0)

最近的CodeMirror版本中不存在

onChange。您必须通过调用cm.on("change", function(cm, change) { .... })注册事件处理程序。