流星中的观测者/钩子

Observers/hooks in Meteor

本文关键字:钩子 观测者 流星      更新时间:2023-09-26

我有一些集合,它们通过ID与其他集合相关。

例如,我有集合PostComments。我想显示每个帖子的评论数量。因此,我在Post中有一个字段,称为numComments。每次插入或删除具有相同postId的注释时,我都可以在一个方法中更新这个数字,但我会使用一些钩子/观测器来确保数字始终更新。

因此,我创建了一个包含内容的文件server/observers.js

Comments.find().observe({
  added: function(document) {
    Posts.update({ postId: document.postId }, { $inc: { numComments: 1 } });
  },
  changed: function(document) {
  },
  removed: function(document) {
    Posts.update({ postId: document.postId }, { $inc: { numComments: -1 } });
  },
});

我喜欢这种解决方案,但这是一个好方法吗?

我的问题是,自从我实现了这个功能以来,控制台窗口会打印出大量的错误/警告。我怀疑这是因为观察员。

在文档中(http://docs.meteor.com/#/full/observe),上面写着:

observe返回一个实时查询句柄,它是一个带有stop方法的对象。不带参数的调用stop可以停止调用回调函数并删除查询。查询将永远运行,直到您调用此(..(

我不确定这意味着什么,但我认为观察员应该手动停止。

看看这个答案。它可能会引导你朝着正确的方向前进,因为这个例子与你想要的非常相似。你不需要在你的收藏中有一个专门的字段来对你的评论进行反应式计数,你可以在你的发布功能中构建它。

我不确定这意味着什么,但我认为观察员应该手动停止

你说得对。在上面链接的示例中,查询被封装在handle变量中。注意

self.onStop(function () {
  handle.stop();
});

它允许您确保在停止发布后不会有任何观察程序仍在运行。