2012-12-26 85 views

回答

5

王牌只停止它已經處理的事件, 您可以使用捕捉事件偵聽器(editor.container.addEventListener(「的keydown」,處理程序,真)) 或使用ACE的命令處理程序

更新:到方框王牌命令有時僅捕獲事件處理程序將工作,但有時王牌hashHandler比大開關在鍵碼

HashHandler = require("ace/keyboard/hash_handler").HashHandler 
var turn = 0 
var h = new HashHandler([{ 
    bindKey: "Up", 
    descr: "Block cursor movement smetimes", 
    exec: function(ed){ 
     turn++ 
     if (turn % 2) 
      return false // allow other ace commands to handle event 
    } 
}]) 
editor.keyBinding.addKeyboardHandler(h) 
// editor.keyBinding.removeKeyboardHandler(h) 

或更緊湊的形式

var h = new HashHandler() 
h.bindKeys({"Up": function(ed){...}}) 
0更好
+0

感謝那,它工作得很好,但它不完全是我想要的。我想阻止編輯在某些情況下下一行,所以我需要在ace之前綁定到keydown事件,所以如果需要的話我可以阻止它。 – amitdar

+0

謝謝!特別是我之後,editor.container.addEventListener(「keydown」,處理程序,真)行。這是我的目標。謝謝! :) – Manachi

3

我也希望能夠選擇性地過濾光標鍵的按鍵(並在彈出窗口而不是它中使用它們)。我能注射用下面的代碼此功能:

editor.keyBinding.origOnCommandKey = editor.keyBinding.onCommandKey; 
editor.keyBinding.onCommandKey = function(e, hashId, keyCode) { 
    if (...) { 
     this.origOnCommandKey(e, hashId, keyCode); 
    } 
} 

鍵代碼38個代表光標,鍵代碼40下來,13進入。如果原始功能未被調用,Ace將不會看到這個按鍵。不幸的是,返回鍵仍被Ace消耗。

這可以阻止與類似的解決方案:

editor.keyBinding.origOnTextInput = editor.keyBinding.onTextInput; 
editor.keyBinding.onTextInput = function(text) { 
    if (...) { 
     this.origOnTextInput(text); 
    } 
} 

文本是在這種情況下一個換行符。