使用Bacon.js处理POC并遇到属性值的一些问题。
我能够在onValue回调中检索所有新属性值,但是我想知道在设置这个新值之前旧属性值是什么。到目前为止,我没有找到任何简单或优雅的解决方案来实现培根开箱即用......我错过了一些东西。
甚至Object.observe()都有办法获取属性的旧值,所以很惊讶我在Bacon中找不到相同的行为。
有人会有任何建议如何处理这个?显然我不想在客户代码中的任何地方坚持最新的属性值,以便能够进行新旧比较......
答案 0 :(得分:1)
您可以使用slidingwindow
创建一个包含2个最新值的新观察点:
var myProperty = Bacon.sequentially(10, [1,2,3,4,5]) // replace with real property
var slidingWindow = myProperty.startWith(null).slidingWindow(2,2)
slidingWindow.onValues(function(oldValue, newValue) {
// do something with the values
})
答案 1 :(得分:0)
由于缺少本机Bacon.js中的功能,我实现了一个自定义解决方案,其中包装器对象在转发给订阅者后保留最新值。因此,客户端代码不会直接进入镜头,而是与观察者一起工作,这也有额外的好处,即通过镜头从客户端代码限制对模型的写入访问,这也是我所需要的。
function Observer (lens) {
this.lastValue = undefined;
this.lens = lens;
};
Observer.prototype = {
onValue(onValueCallback){
this.subscription = this.lens.onValue(function(newValue) {
onValueCallback(this.lastValue, newValue);
this.lastValue = newValue;
});
},
};
var model = new Bacon.Model({ type : "A"});
var observer = new Observer(model.lens());
observer.onValue(function(oldValue,newValue) { ... });