3

에서 일부 EventStream 변화에 따라 http://baconjs.github.io/전환하는 방법 스트림은 베이컨

var up = $('#up').asEventStream('click'); 
var down = $('#down').asEventStream('click'); 

var counter = 
    // map up to 1, down to -1 
    up.map(1).merge(down.map(-1)) 
    // accumulate sum 
    .scan(0, function(x,y) { return x + y }); 

// assign observable value to jQuery property text 
counter.assign($('#counter'), 'text'); 

에서이 예제를 생각해 내가이 버튼을 클릭에서 카운터와 이벤트 스트림을 재설정하는 또 하나 개의 버튼이있는 경우. 리셋 클릭 스트림을 기반으로 카운터 스트림을 전환하여 카운터를 재설정하려면 어떻게해야합니까? .flatMapLatest 메서드를 사용해야한다는 것을 알고 있지만,이 예제를 참조하면 어떻게하는지 알 수 없습니다. #reset 가정

답변

3

을 리셋하는 버튼입니다. 이 예제에서와 같이 강력하고 훨씬 더 간단한 Bacon.update을 사용할 수 있습니다. 우리는 간단한 상태 머신을 가지고 있습니다.

var up = $('#up').asEventStream('click'); 
var down = $('#down').asEventStream('click'); 
var reset = $('#reset').asEventStream('click'); 

var counter = Bacon.update(0, 
    [up], function (prev, unused) { return prev + 1; }, 
    [down], function (prev, unused) { return prev - 1; }, 
    [reset], function (prev, unused) { return 0; } 
); 
1

당신은 여기 flatMapLatest 필요하지 않습니다

var up = $('#up').asEventStream('click'); 
var down = $('#down').asEventStream('click'); 
var reset = $('#reset').asEventStream('click'); 

var counter = reset.flatMapLatest(function() { 
    return up.map(1).merge(down.map(-1)) 
      .scan(0, function(x,y) { return x + y }); 
}); 

counter.assign($('#counter'), 'text');