我正在使用Knockout observable来更新表格单元格中的跨度值。当新值与旧值不同时,我需要更改表格单元格的背景颜色。当我订阅observable时,我似乎无法在更新期间访问旧值。有没有办法获得旧的价值?我计划使用带有observable状态的css绑定来更新表格单元格背景。
<td data-bind="css: { tempIncreased: tempState() > 0 }">
<span data-bind="text: temp"></span>
</td>
在视图模型中:
this.temp.subscribe(function (newValue) {
var old = this.temp();
if (newValue > old) {
this.tempState = 1;
}
else {
this.tempState = 0;
}
}, this);
答案 0 :(得分:3)
Knockout 2.0增加了将主题订阅到可观察对象的能力。 “beforeChange”主题将为您提供之前的值。
有了这个,您可以扩展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);