1
以下代碼的ko.computed
是name
的大寫版本。用戶修改name
,但計算出的可觀察值不跟蹤更改。knockout.js可觀察到的用戶操縱ko.computed的依賴關係
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
Here's所述的jsfiddle。
更新:看來這是故意給予this line。我的猜測是,它是爲了防止程序員意外地引發無限遞歸。
是的,這是故意的。 –