【发布时间】:2013-12-23 15:52:54
【问题描述】:
我想知道 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
【问题讨论】:
标签: knockout.js