所以我正在尝试制作一个 SCXML 编辑器,它基本上是 XML(状态机),其中包含 JavaScript 块。我很接近,但我无法添加提示。似乎归结为我不知道我在提示时所处的编辑模式。我在 CodeMirror 对象中查看了线索,但没有看到。我正在像这样进行多路复用:
CodeMirror.defineMode("scxml", function (config) {
return CodeMirror.multiplexingMode(
CodeMirror.getMode(config, "text/xml"),
{
open: "<script>", close: "</script>",
mode: CodeMirror.getMode(config, "text/javascript"),
delimStyle: "delimit"
}
);
});
editorXml = CodeMirror.fromTextArea(document.getElementById("editXmlFile"), {
lineNumbers: true,
mode: 'scxml',
indentUnit: 4,
autoCloseTags: true,
matchBrackets: true,
extraKeys: {
"'>'": function (cm) { cm.closeTag(cm, '>'); },
"'/'": function (cm) { cm.closeTag(cm, '/'); },
"' '": function (cm) { CodeMirror.xmlHint(cm, ' '); },
"'<'": function (cm) { CodeMirror.xmlHint(cm, '<'); },
"Ctrl-Space": function (cm) { CodeMirror.xmlHint(cm, ''); }
}
});
请注意extraKeys
XML 提示的工作位置,如何在其中获取 JavaScript 提示?从 JavaScript 提示帮助看来,我会按照以下方式做一些事情:
CodeMirror.commands.autocomplete = function(cm) {
CodeMirror.simpleHint(cm, CodeMirror.javascriptHint);
}
... extraKeys: {"Ctrl-Space": "autocomplete"} ...
但无论哪种方式,我都需要知道我所处的模式(XML 或 JavaScript)才能知道使用simpleHint
vs xmlHint
. 任何人都知道如何做到这一点?
编辑:当我在任何一个部分时才cm.getMode().name
回来cm.getOption('mode')
scxml
谢谢!