推迟或暂停敲除中的依赖项评估,直到视图模型完全更新(例如使用映射插件)

Defer or pause evaluating dependencies in knockout until viewmodel is completely updated (using for instance the mapping plugin)

本文关键字:更新 模型 插件 映射 视图 暂停 依赖 评估 推迟      更新时间:2023-09-26

我有一个复杂的淘汰视图模型,它是使用映射插件创建的。我还使用映射插件更新了视图模型:

 ko.mapping.fromJS(json, viewmodel);

我有几个订阅使用多个视图模型字段来计算结果。映射插件分别更新每个字段,并在每次更改时执行订阅。因为不是所有的值都在同一时间更新,所以计算有时会混合使用不同字段的新旧值,这在我的情况下会引起问题。

有没有办法告诉映射插件或敲除程序等待依赖项的评估,直到我告诉它所有值都已设置?

我最终所做的是在我的视图模型中创建一个可观察的对象,该对象在批更新完成后被赋予一个值。我还定义了一个手动订阅,它在那一刻执行相关代码:

viewmodel.finishedBatchUpdate : ko.observable();
...
ko.mapping.fromJS(json, viewmodel);
viewmodel.finishedBatchUpdate.notifySubscribers(true);
...
viewModel.finishedBatchUpdate.subscribe(function() {
  // my code
});

我也可以创建一个pureComputed,并依赖于这个可观察的,但我不需要在这个pureComputed本身上绑定任何东西。在我看来,手动订阅更干净。