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方法,但是参考这个例子我不知道该怎么做。
答案 0 :(得分:3)
你在这里不需要flatMapLatest
。您可以使用功能强大且更简单的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 :(得分:1)
假设#reset
是重置按钮
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');