FRP с Bacon.js — как смоделировать кнопку паузы?

Я пытаюсь понять функционально-реактивное программирование и, в частности, FRP с Bacon.js, и у меня возникли проблемы с поиском правильного комбинатора для создания кнопки паузы.

var pauses = $('.pause').asEventStream('click');
var plays = $('.plays').asEventStream('click');
var ticks = Bacon.interval(500).whatGoesHere(???);

Я хочу, чтобы сигнал паузы отсекал сигнал тиков, а сигнал воспроизведения восстанавливал его. Вот мраморная диаграмма, которую я хочу:

intervals   x x x x x x x x x x x x x x x x x x x x x x x
pauses              x                         x     x
plays                         x       x               x
ticks       x x x x           x x x x x x x x         x x

Ничего страшного, если время немного сдвинуто, но в целом это именно тот эффект, который мне нужен.

Какой комбинатор я должен использовать для достижения этой цели?


person George Mauer    schedule 27.01.2014    source источник


Ответы (1)


Объедините воспроизведение и паузу как свойство и отфильтруйте с его помощью поток интервалов.

var pauses = $('.pause').asEventStream('click').map(false);
var plays = $('.plays').asEventStream('click').map(true);
var isTicking = pauses.merge(plays).toProperty(true);
var ticks = Bacon.interval(500).filter(isTicking);
person JJuutila    schedule 27.01.2014