如何使Meteor中的部分文档不具有反应性

How to make part of the document not reactive in Meteor

本文关键字:文档 有反应 何使 Meteor      更新时间:2023-12-10

大多数Meteor都围绕着集合和游标,并在它们出现在集合中并符合条件时获取新文档。然而,我正在处理更大的文件,这些文件包含多个字段,结构深刻且不可预测。在顶层有一个清晰的模式,但有些子文档是不可预测的json数据。

但让我们来看一个更简单的例子:

Reports = new Mongo.collection('reports'); 
Meteor.publish('reports', function() {
    return Reports.find({});
});

然后在客户端,我打开一个报告,使用相当复杂的html渲染功能将其放在屏幕上,然后在报告中嵌入了自由文本注释字段。当它们被更改时,我想自动保存它们

Meteor.call("autosaveReport",reportId,comment);

然后有流星方法写在评论

Meteor.methods({
   "autosaveReport": function(reportId,comment) {
        Reports.update({_id:reportId},{$set:{comment:comment}});
   }
);

问题是,每次自动保存注释时,Meteor Tracker都会重新运行与此报告相关的所有子脚本和查找结果。由于报告很大,呈现也很复杂,因此重新加载对用户来说是可见的,并破坏了无缝自动保存的目的。

那么,问题是——是否有可能只在mongo文件的部分内容上触发反应?目前,我已经通过在渲染时手动比较新旧文档来解决这个问题,如果核心没有差异,则停止重新渲染。这感觉很奇怪,违背了流星精神。

在为模板设置数据上下文的助手或路由中,在find:中使用{reactive: false}

return Reports.find(query,{reactive: false});

这样,当底层对象发生更改时,辅助对象就不会更新。

然而,这个标志要么全有要么全无,它不会让你选择性地观察哪些变化,忽略哪些变化。