2

そこで、基本的に JavaScript ブロックを含む XML (ステート マシン) である SCXML エディターを作成しようとしています。私は近いですが、ヒントを追加するのに苦労しています。要するに、ヒントを出すときが来たら、現在の編集モードがわからないということです。手がかりを得るために 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, ''); }
    }
});

XML ヒントが機能している場所に注意してください。extraKeysそこで JavaScript ヒントを取得するにはどうすればよいですか? JavaScriptヒントヘルプから、次の行に沿って何かをするようです:

  CodeMirror.commands.autocomplete = function(cm) {
    CodeMirror.simpleHint(cm, CodeMirror.javascriptHint);
  }

  ... extraKeys: {"Ctrl-Space": "autocomplete"} ...

simpleHintしかし、いずれにせよ、使用するモード (XML またはJavaScript ) を知る必要がありますxmlHint。これがどのように行われるか知っている人はいますか?

編集:どちらかのセクションにいるときにcm.getMode().name戻っcm.getOption('mode')てくださいscxml

ありがとう!

4

1 に答える 1

0

にディスパッチできるはずだと思います。 は、関心CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(POS).state).mode.namePOSある位置です。または{line, ch}のような名前を返し、その位置の内部モードを説明します。"xml""javascript"

于 2012-12-23T08:45:13.587 に答える