我想知道淘汰赛在哪里存储了可观测值的价值。例如,我有以下代码:
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'
因此,不确定淘汰赛在哪里存储价值。我看到了peek()的实现,它返回了_latestValue。但是,即使在手动更改_latestValue之后,在调用peek()时仍然可以得到旧值。
我希望在手动设置_latestValue之后,像field1()或field1.peek()之类的调用会返回新值。
我知道不会调用订阅者,并且_latestValue是内部变量,这可能会有些棘手,但这对我需要解决的问题很好。
编辑:我想要这样做的原因是为计算的可观察值设置初始值。因此,我希望能够修改其_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
有一个称为的内部变量_latestValue
。在调试版本中,这是从观察到的暴露出来的._latestValue
。但是,直接设置它不会影响内部_latestValue
变量。
喜欢:
var a = 1
this.a = a;
this.a = 2;
在此示例中,变量a
仍为1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句