javascript - 确定 observable 在 computed 中是否发生了变化

标签 javascript knockout.js

我正在计算的可观察对象中实现缓存函数。

如果 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/

相关文章:

javascript - 自定义绑定(bind)无法从 Knockout 2.3 更新到 3.3

javascript - 如何在单页面应用程序(SPA)的特定页面中隐藏对讲聊天小部件?

javascript - 如何为 "Search"函数执行自动提交?

knockout.js - 如何使用 knockout 绑定(bind)访问文件输入?

javascript - ko.Computed() 未使用 observableArray 进行更新

javascript - 如何使 "go to definition"适用于 vscode 中的 javascript 网页?

javascript - 错误 : container has not been made global - how to solve?

javascript - 您不能对同一个元素多次应用绑定(bind)

javascript - 如何在 knockout.js 中递归使用模板

html - 将 foreach 与表行绑定(bind)