Отправка текста с помощью 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 событие.

0 ответов

Другие вопросы по тегам