0
我想知道敲除存儲可觀察值的位置。例如,我有以下代碼:敲除可觀察的最新值
var field1 = ko.observable('a');
field1(); // prints 'a'
field1.peek(); // prints 'a'
field1._latestValue; //prints 'a'
field1._latestValuu = 'b';
field1._latestValue; //prints 'b'
field1(); // prints 'a'
field1.peek(); //prints 'a'
因此不確定Knockout存儲值在哪裏。我看到peek()的實現並返回_latestValue。但是,即使在手動更改_latestValue之後,在調用peek()時仍然會獲得舊值。
我希望在手動設置_latestValue之後,像field1()或field1.peek()這樣的調用返回新的值。
我知道訂閱者不會被調用,這可能有點棘手,因爲_latestValue是一個內部變量,但這對我需要解決的問題很好。
編輯:我想這樣做的原因是爲計算的observable設置初始值。所以我希望能夠修改它的_latestValue,所以當我調用field()或field.peek()時,它會返回手動設置的值,而不是計算的值。我將使一個標誌,像這樣計算:
var Object1 = function() {
self.mode = ko.observable('read-only');
self.calculated = ko.computed({
read: function() {
if (self.mode() == 'read-only') {
if (self.calculated)
return self.calculated._latestValue;
} else {
// calculation goes here
}
},
write: function(value) {
self.calculated._latestValue = value;
}
});
};
var obj1 = new Object1();
obj1.calculated('a');
obj1.calculated(); // prints 'a'
obj1.mode('edit');
obj1.calculated(); // prints calculated value