我正在计算的可观察对象中实现缓存函数。
如果 items
集合自上次调用以来不同,是否有任何方法使下面的缓存无效?
我见过脏检查的示例,其中使用可观察对象的序列化版本来确定集合是否已更改,但这对我来说太昂贵了,因为可能有数百个项目。
var itemCache;
var manipulatedItems = ko.pureComputed(function(){
var items = someObervable();
if(!itemCache /* || someObervable.hasChangedSinceLastCall */) {
itemCache = heavyWork(items);
}
return itemCache;
});
var heavyWork = function(items){
// do some heavy computing with items
return alteredItems;
};
在我的 View 模型中:
myViewModel.itemList = ko.pureComputed(function(){
var result = manipulatedItems();
return result;
});
最佳答案
由于计算的可观察对象总是缓存最后一个值,因此没有理由单独存储它。事实上,单独存储它可能会导致在您的应用程序中获取最新数据时出现问题。
var manipulatedItems = ko.pureComputed(function () {
var items = someObervable();
return heavyWork(items);
});
var heavyWork = function (items) {
// do some heavy computing with items
return alteredItems;
};
关于javascript - 确定 observable 在 computed 中是否发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38845757/