以下代码有一个ko.computed
大写版本的name
. 订阅者修改name
,但计算出的 observable 不跟踪更改。
var ViewModel = function() {
this.name = ko.observable("Brad");
this.nameUpper = ko.computed(function() {
return this.name().toUpperCase();
}, this);
};
var model = new ViewModel();
model.nameUpper.subscribe(function(newValue) {
console.log('nameUpper changed to ' + newValue);
this.name("Chris");
}, model);
console.log('nameUpper = ' + model.nameUpper());
model.name("Stevie");
console.log('nameUpper = ' + model.nameUpper());
预期输出:
nameUpper = BRAD
nameUpper changed to STEVIE
nameUpper = CHRIS
实际输出:
nameUpper = BRAD
nameUpper changed to STEVIE
nameUpper = STEVIE
这是jsfiddle。
更新:鉴于这条线,这似乎是故意的。我的猜测是,这是为了保护程序员免于意外引发无限递归。