Knockout.js 淘汰JS更新颜色

Knockout.js 淘汰JS更新颜色,knockout.js,Knockout.js,我使用敲除观测值来更新表单元格中的跨度值。当新值与旧值不同时,我需要更改表格单元格的背景色。似乎当我订阅可观察到的时,我在更新期间无法访问旧值。有没有办法获得旧值?我计划使用css绑定更新表格单元格背景,并使用可观察的状态 <td data-bind="css: { tempIncreased: tempState() > 0 }"> <span data-bind="text: temp"></span> </td> 敲除2.0增

我使用敲除观测值来更新表单元格中的跨度值。当新值与旧值不同时,我需要更改表格单元格的背景色。似乎当我订阅可观察到的时,我在更新期间无法访问旧值。有没有办法获得旧值?我计划使用css绑定更新表格单元格背景,并使用可观察的状态

<td data-bind="css: { tempIncreased: tempState() > 0 }">
    <span data-bind="text: temp"></span>
</td>

敲除2.0增加了订阅可观察主题的能力。“更改前”主题将为您提供以前的值

有了它,您可以扩展observables来添加一个订阅,该订阅向回调提供旧值和新值

它可能看起来像:

ko.observable.fn.beforeAndAfterSubscribe = function(callback, target) {
    var _oldValue;
    this.subscribe(function(oldValue) {
        _oldValue = oldValue;
    }, null, 'beforeChange');

    this.subscribe(function(newValue) {
        callback.call(target, _oldValue, newValue);
    });
};
您可以将此函数添加到
ko.subscribable.fn
而不是
ko.observable.fn
,以便能够对计算的和正常的观测值执行此操作

您可以这样使用:

this.temp.beforeAndAfterSubscribe(function (oldValue, newValue) {
    if (newValue > oldValue) {
        this.tempState = 1;
    }
    else {
        this.tempState = 0;
    }
}, this);
以下是一个示例:

this.temp.beforeAndAfterSubscribe(function (oldValue, newValue) {
    if (newValue > oldValue) {
        this.tempState = 1;
    }
    else {
        this.tempState = 0;
    }
}, this);