如何在单个文档中按字段订阅更改

时间:2012-11-21 04:53:54

标签: meteor

我正在尝试找出订阅单个文档中特定更改的正确模式。一个例子将更好地突出我正在尝试做的事情。比如,我有一篇博客文章的Mongo文档,其中包含一个评论列表。现在,我有一个查询来查找该帖子:Posts.findOne("<id">),它会反复更新我的模板:

<template name="post">
    <h1>{{title}}</h1>
    {{#each comments}}
        {{> comment this}}
    {{/each}}
</template>

问题在于,当该帖子发生任何变化时(通常是人们添加它们的评论列表),每个查看该帖子的人都会刷新整个事情。我宁愿1)设置一些特定于字段的侦听器,和/或2)做一些手动拦截来说“发布更新时,检查更新的内容,并根据更改的内容更新某些内容(例如,仅更新)已更新的评论,或者,看起来有新记录 - 让我们添加它)“。

我知道使用Collection.observe在文档级别可以做到这一点(例如,随着新文档的出现,您可以精确控制以查看更改的内容),但是在文档中呢?我想我可以通过将当前文档存储在会话中来实现,然后当文档更新并且我通过被动查找命令通知时,将新文档与旧文档进行比较,但这是最好的方法吗?我错过了一些明显的东西吗?

非常感谢任何指导!

1 个答案:

答案 0 :(得分:0)

我也在学习Meteor(几周后),并且遇到了你所描述的问题。我此时的建议是,您的应用已订阅 2 集合:帖子评论

评论项目可能如下所示:

{
  _id    :  \\ auto-generated ID by Mongo,
  text   : 'this is the comment',
  PostID : 'postUniqueID'
  user   : 'username'
  //etc. 
}

在客户端,在 Comments 订阅中,您将帖子的唯一ID作为参数传递。在服务器端,您只发布PostID = postUniqueID 的评论。

重要:您需要在Meteor.autorun()块中设置评论订阅,以便每当用户切换到另一篇博文时它都会更改。

根据我的经验,这种方法使您的模板和编码更加简单。但是,我没有分析订阅两个集合(而不是一个)对Meteor的性能有显着影响。