Kod*_*hor 83 observable knockout-2.0 knockout.js
在获得新值之前,是否可以在knockout中获取可观察的可观察量的当前值?
例:
this.myObservable = ko.observable();
this.myObservable.subscribe(function(newValue){
//I'd like to get the previous value of 'myObservable' here before it's set to newValue
});
Run Code Online (Sandbox Code Playgroud)
JBe*_*gle 147
ko.subscribable.fn.subscribeChanged = function (callback) {
var oldValue;
this.subscribe(function (_oldValue) {
oldValue = _oldValue;
}, this, 'beforeChange');
this.subscribe(function (newValue) {
callback(newValue, oldValue);
});
};
Run Code Online (Sandbox Code Playgroud)
使用上面这样:
MyViewModel.MyObservableProperty.subscribeChanged(function (newValue, oldValue) {
});
Run Code Online (Sandbox Code Playgroud)
RP *_*yer 87
有一种方法可以像这样订阅之前的值:
this.myObservable = ko.observable();
this.myObservable.subscribe(function(previousValue){
//I'd like to get the previous value of 'myObservable' here before it's set to newValue
}, this, "beforeChange");
Run Code Online (Sandbox Code Playgroud)
And*_*ies 21
Beagle90的答案变化不大.始终返回订阅本身以便能够访问dispose().
ko.subscribable.fn.subscribeChanged = function (callback) {
var oldValue;
this.subscribe(function (_oldValue) {
oldValue = _oldValue;
}, this, 'beforeChange');
var subscription = this.subscribe(function (newValue) {
callback(newValue, oldValue);
});
// always return subscription
return subscription;
};
Run Code Online (Sandbox Code Playgroud)
Jam*_*son 18
添加此功能的pull请求有一些不同的代码,最终比依赖使用beforeChange
事件更好.
迈克尔·贝斯特解决方案的所有功劳
ko.subscribable.fn.subscribeChanged = function (callback) {
var savedValue = this.peek();
return this.subscribe(function (latestValue) {
var oldValue = savedValue;
savedValue = latestValue;
callback(latestValue, oldValue);
});
};
Run Code Online (Sandbox Code Playgroud)
引用迈克尔:
我最初建议
beforeChange
用来解决这个问题,但后来意识到它并不总是可靠的(例如,如果你调用valueHasMutated()
了observable).
归档时间: |
|
查看次数: |
36817 次 |
最近记录: |