2014-01-27 4 views
4

Я пытаюсь получить свой мозг вокруг Functional Reactive Programming, и, в частности, 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 

Это нормально, если хронометраж откусил, но это эффект, который я хочу в целом.

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

ответ

7

Слияние играет и приостанавливает как свойство и фильтрует интервал потока с ним.

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); 
+0

Не понял, что «фильтр» работал так. Благодаря! –