почему редактор ace не выдает событие tokenizerUpdate

#javascript #durandal #ace-editor

#javascript #durandal #ace-editor

Вопрос:

У меня есть этот код внутри compositionComplete()

 this.docEditor = aceEditorBindingHandler.getEditorBySelection($(docEditorSelector);
// this.docEditor is of type AceAjax.Editor

if (this.docEditor) {
        this.docEditor.getSession().on("tokenizerUpdate", () => {
            // do stuff
        });
    }
  

но оно никогда не попадает.

Если я изменю событие на ‘ change ‘, то при изменении содержимого будет отображен код.
Но это не то, что мне нужно.

Есть идеи? кто-нибудь?

Ответ №1:

Обновление токенизатора не вызывается синхронно, аналогично событию изменения. Смотрите пример ниже для демонстрации его работы.

 <script src=https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js></script>

<script>
  editor = ace.edit(null, {
    mode: "ace/mode/javascript",
    minLines: 5,
    maxLines: 10,
  })
  var log = ace.edit(null, {
    mode: "ace/mode/javascript",
    minLines: 5,
    maxLines: 10,
  })

  document.documentElement.appendChild(editor.container)
  document.documentElement.appendChild(log.container)
  editor.session.on("tokenizerUpdate", () => {
    log.insert("tokenizerUpdate called "   Date.now()   "n")
  })
</script>