我需要一个时间戳来更新值。由于我不想进入这里的原因,value
是一个可写的计算结果,指向一个valueInstance
观测值,所以它们基本上显示相同的数据。Knockout订阅正在意料之外的评估
如果我订阅observable,它按预期工作,只有当observable发生变化时才会触发。如果我订阅了计算器,它立即引发一个错误的时间戳,即使observable仍未定义。这是怎么回事?
更新:看起来像当计算这只是发生了deferEvaluation: true
function VM(){
var self = this;
self.valueInstance = ko.observable();
self.value = ko.computed({
read: function() {
return self.valueInstance();
},
write: function (value) {
self.valueInstance(value);
},
deferEvaluation: true
});
self.timeStamp1 = ko.observable();
self.value.subscribe(function (newValue) {
self.timeStamp1(new Date());
});
self.timeStamp2 = ko.observable();
self.valueInstance.subscribe(function (newValue) {
self.timeStamp2(new Date());
}); }
什么是你的问题?我没有看到任何意外的行为。 – Damien
即使'value'没有改变,'value.subscribe'也会在初始加载时触发。订阅应该只在值更改时触发。 – Homer