计算的读/写问题:“写”导致“读”执行。
我有读/写计算(或者也可以是纯计算)。它是可写的,因为它可以从 startDate 和 endDate 计算出来。但是,它也可以直接设置,因此它是“可读的”并且基于值 startDate 和 endDate 被设置。这是我的模型的简化版本:
self.startDate = ko.observable(...);
self.endDate = ko.observable(...);
self.selectedTimePeriod = ko.pureComputed({
read: function () {
console.log('time period read');
var startDate = self.startDate(),
endDate = self.endDate(),
timePeriod = Enums.TimePeriodTypeEnum.None;
timePeriod = Constants.MTD;
return timePeriod;
},
write: function (timePeriodValue) {
console.log('time period write');
switch (timePeriodValue) {
case Constants.MTD:
self.startDate(...);
self.endDate(...);
break;
}
}
});
self.timePeriodChange = function () {
self.selectedTimePeriod(Constants.MTD);
}
用户点击 UI 触发self.timePeriodChange功能。结果在控制台中我看到以下内容:
time period write
time period read
time period read
因此,执行“写入”部分,但是,当我更改 startDate 和 endDate 时 - 每次也执行“读取”部分。我看到这是因为写入更新读取 - 但如果我不希望这样怎么办?如何处理这种情况?
建议是使用 peek,但这会导致其他问题(可观察到的未更新)。这是我的提琴手:https ://jsfiddle.net/o5kacas3/ (更改下拉列表,不会更改在 UI 上计算的实际值,即使执行写入部分也是如此)。