Bacon.js 属性 新值和旧值

Bacon.js Property new value and old value

在使用 Bacon.js 和 运行 的 POC 中遇到了一些 属性 值的问题。

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

甚至 Object.observe() 也有办法获得 属性 的旧值,令我惊讶的是我在 Bacon 中找不到等效的行为。

有人对如何处理这个问题有什么建议吗?显然我不想为了能够在新旧之间进行比较而严格地在客户端代码中的任何地方保留最新的 属性 值...

由于本机中缺少功能 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) { ... });

您可以使用 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
})