如果用户在显示自定义弹出窗口时按下 down
键,我希望从编辑器中取消此 down
事件并手动处理。
但是,如果弹出窗口被禁用,则“向下”键应照常执行。
为此,我写了这个:
editor.commands.addCommand({
name: 'nav_down.',
bindKey: {win: 'Down', mac: 'Down'},
exec: function(editor) {
if(myPopupIsOpen()) {
// Do whatever I want with the popup.
return false;
} else {
// just leave the key.
return true;
}
readOnly: true
});
不幸的是,我可以返回
false
或 true
,结果是一样的,它总是捕获 down 事件,这很烦人。我怎样才能防止这种情况?我已经尝试了以下方法:
编辑
@a 用户的解决方案效果很好。
而不是上面的命令,我写道:
var HashHandler = require("ace/keyboard/hash_handler").HashHandler;
keyboardHandler = new HashHandler();
keyboardHandler.addCommand({
name: 'nav_down.',
bindKey: {win: 'Down', mac: 'Down'},
exec: function(editor) {
if(myPopupIsOpen()) {
// Do whatever I want with the popup.
return true; // CHANGE HERE ! true is when it capture it.
} else {
// just leave the key.
return false; // CHANGE HERE ! false is when I don't capture it.
}
readOnly: true
});
editor.keyBinding.addKeyboardHandler(keyboardHandler);
最佳答案
在当前版本中,ace 只为每个键保留一个命令,因此您的 addCommand 调用会删除 down 的默认绑定(bind)。
您可以添加类似于自动完成功能的新键盘处理程序 https://github.com/ajaxorg/ace/blob/v1.1.3/lib/ace/autocomplete.js#L221
var HashHandler = require("ace/keyboard/hash_handler").HashHandler;
keyboardHandler = new HashHandler();
keyboardHandler.addCommand(/*add your command with return false*/)
editor.keyBinding.addKeyboardHandler(keyboardHandler);
关于javascript - ACE 有条件地更改键绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24366585/