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