我想知道Knockout在哪里存储了可观察量的价值。例如,我有以下代码:
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
答案 0 :(得分:1)
有一个名为_latestValue
的内部变量。在调试版本中,它作为._latestValue
从observable中暴露出来。但是,直接设置不会影响内部_latestValue
变量。
像:
var a = 1
this.a = a;
this.a = 2;
在此示例中,变量a
仍为1;