Ace小编:为什么键盘事件处理器被调用了两次?

Ace editor: Why is the keyboard event handler being called twice?

目前,只要在我的 ace 编辑器中按下任何键,我都会通过此 javascript 代码捕获键盘事件:

editor.keyBinding.addKeyboardHandler({
    handleKeyboard: function(data, hash, keyString, keyCode, event) {
        console.log(ketString)
        ...
    }

问题是每次在 ace 编辑器中按下一个键时,处理函数被调用两次,但我希望它被调用一次。有什么想法吗?

编辑

根据@Michael Geary 的反馈,我在每次调用键盘处理程序时添加了一个 console.trace(),并且我在 ace.js 代码中跟踪了来自两个位置的调用:

this.onCommandKey = function(e, t, n) {
    var i = r.keyCodeToString(n);
    this.$callKeyboardHandlers(t, i, n, e)      <-----------
}
,
this.onTextInput = function(e) {
    this.$callKeyboardHandlers(-1, e)           <-----------
}

问题是,为什么 onCommandKeyonTextInput 都被触发了?

他们用不同的 hashid 调用它,并且通常使用不同的密钥字符串。第一次调用是针对按键事件,其中 hashid 是修饰键的组合,如 https://github.com/ajaxorg/ace/blob/55f206452dd2ebd4094edbae7a145bfb09da87bb/lib/ace/keyboard/hash_handler.js#L225 中所示。 第二个是 hashid=-1

的 textinput 事件