Bacon.js属性新值和旧值

时间:2015-09-02 16:21:08

标签: javascript properties observable bacon.js

使用Bacon.js处理POC并遇到属性值的一些问题。

我能够在onValue回调中检索所有新属性值,但是我想知道在设置这个新值之前旧属性值是什么。到目前为止,我没有找到任何简单或优雅的解决方案来实现培根开箱即用......我错过了一些东西。

甚至Object.observe()都有办法获取属性的旧值,所以很惊讶我在Bacon中找不到相同的行为。

有人会有任何建议如何处理这个?显然我不想在客户代码中的任何地方坚持最新的属性值,以便能够进行新旧比较......

2 个答案:

答案 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) { ... });