我有一个出版物,其范围取决于另一个集合的元素属性。基本上,它看起来像这样在服务器上:如何处理流星中的动态订阅?
Meteor.publish('kids', function (parent) {
return Kids.find({ _id: { $in: parent.childrenIds } });
}
在上面parent.childrenIds
的例子是包含所有在父的孩子的孩子的_id的数组。直到我想一个新的子添加到父这工作得很好:
newKidId = Kids.insert({ name: 'Joe' });
Parents.update({ _id: parentId }, { $push: { childrenIds: newKidId } });
这工作服务器上的Kids
集合(即,新的孩子加入),并将其与更新父childrenIds
阵列newKidId
。但它不会更新上面的'孩子'出版物(光标不更新/修改)。因此,客户端的Kids
集合未更新(并且看起来像在客户端上回滚到Kids
的更改)。
当客户端刷新时,所有发布都会停止/重新启动,并且新的孩子(Joe)最终会发布到客户端。
有没有办法避免刷新客户端并强制重新发布Kids
集合(理想情况下只发送新的孩子乔到客户端)?
感谢jigill对于这个要点 - 它确实有效。现在,您的服务器代码确实依赖于发送正确的“父对象”的客户端来确定“parent.childrenIds”中的(最新)密钥是什么。这是一个安全漏洞。你会如何检查服务器上的父母确实已经更新了那个特定的孩子?我尝试传递'parent._id'(并修改Kids出版物),但它打破了预期的行为(请参阅https://gist.github.com/jbmoens/5476431 - 我已评论我的编辑) – 2013-04-28 09:45:44
这是一个单独的问题,我很乐意回答。但最好将其作为一个新问题发布,接受/关闭此问题。 – jagill 2013-04-28 21:21:31
完成 - 看[这里](http://stackoverflow.com/questions/16274226/how-to-make-dynamic-subscriptions-secure-in-meteor) – 2013-04-29 08:29:07