ACE изменение ключа привязки условно
Если пользователь нажимает 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, что раздражает. Как я могу предотвратить это?
Я уже попробовал следующее:
- Добавьте привязку ключа к DOM. Но после этого взаимодействие всегда происходит (т.е. я не могу его уловить).
- Верните false или true, как предложено для общих событий, но здесь это не работает.
РЕДАКТИРОВАТЬ
Решение от пользователя @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);
1 ответ
В текущей версии ace сохраняет только одну команду для каждого ключа, поэтому ваш вызов addCommand удаляет привязку по умолчанию для down.
Вы можете добавить новый обработчик клавиатуры, аналогичный тому, что делает автозаполнение 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);