Отправка текста с помощью blessed.js
Я пытаюсь написать функцию, которая создаст textarea
элемент для чтения строки и удаления элемента после его завершения. Вот чем я закончил:
function getText() {
let input = blessed.textarea({
parent: screen,
top: 'center',
left: 'center',
width: '50%',
height: '25%',
border: {
type: 'line'
},
inputOnFocus: true,
style: {
border: {
fg: 'default'
}
}
});
input.key(['enter'], () => input.submit());
input.key(['escape'], () => input.cancel());
input.on('submit', () => {
let text = input.getValue();
input.destroy();
// process the text...
debug('done!');
});
input.on('cancel', () => {
input.destroy();
debug('cancelled');
});
input.focus();
}
Однако всякий раз, когда я нажимаю "ввод", он отменяет ввод, а не отправляет его. Я попытался отладить код и обнаружил, что хотя для ключевого события вызывается правильный обработчик, cancel
Обработчик вызывается впоследствии. Может ли кто-нибудь сказать мне, что именно я делаю не так?
редактировать
После просмотра исходного кода textarea
я узнал что submit()
а также cancel()
методы в основном делают одно и то же:
Textarea.prototype.submit = function() {
if (!this.__listener) return;
return this.__listener('\x1b', { name: 'escape' });
};
Textarea.prototype.cancel = function() {
if (!this.__listener) return;
return this.__listener('\x1b', { name: 'escape' });
};
призвание __listener()
здесь на самом деле звонки _listener
из-за привязки, сделанной заранее. Так как key.name
равно 'escape'
внутри метода происходит вызов done(null, null)
, внутри done()
среди других операций мы выделяем submit
или же cancel
событие, основанное на втором аргументе вызова, value
, Вот соответствующий фрагмент кода:
if (err) {
self.emit('error', err);
} else if (value != null) {
self.emit('submit', value);
} else {
self.emit('cancel', value);
}
self.emit('action', value);
Я мог бы что-то упустить, но если нет, то все это означает, что оба submit()
а также cancel()
методы элемента на самом деле испускают cancel
событие.