В Javascript и с использованием Kefir я хотел бы захватить все вводы клавиш до тех пор, пока не ударит ENTER
. До сих пор мне удалось это сделать с помощью bufferWhile
какЗахват всех вводов клавиш до тех пор, пока не будет нажата клавиша ENTER в режиме реактивного программирования.
var inputValues = Kefir
.fromEvents(document.querySelector('body'), 'keydown')
.bufferWhile(event => event.keyCode!=13);
var result = inputValues.toProperty(() => "");
result
.onValue(x => elm.innerHTML = x.slice(0,-1).map(y => String.fromCharCode(y.keyCode)).join(''))
.onError(() => elm.innerHTML = "?");
, но изначально я хотел использовать обычный scan
как в
var inputValues = Kefir
.fromEvents(document.querySelector('body'), 'keydown')
.scan((acc, y) => acc.concat(y), "");
, но тогда как я:
- Вывод аккумулятора, когда удаляется
ENTER
? - Перезапустите аккумулятор, чтобы начать новую последовательность нажатия клавиш?
По существу, как вы составляете bufferWhile
с использованием scan
и одного потока? Ответ не обязательно должен быть конкретно о Кефире, хотя любой псевдо-код FRP будет делать.
Он работает для вас с 'bufferWhile', но вы хотите сделать то же самое с' scan'? – iofjuupasli
@iofjuupasli 'scan' или что-то еще. Я хотел бы достичь того же и, возможно, добавить тайм-аут, чтобы захватить кластерные нажатия клавиш. –