我正在尝试在一个巨大的应用程序中实现一个评论系统,并且总是遇到交叉反应和出版物的问题。
具体问题:
当用户撰写评论时,我想显示用户的姓名和个人资料照片。评论在一个集合中,名称和图片在另一个集合中。
当我订阅此页面上的每个评论以及每个用户的id都在此页面的评论服务器中时,该应用程序不会更新添加新评论时客户端上可用的用户,因为“加入”在服务器上是非活动的。
当我在客户端上执行此操作时,我必须一直取消订阅并重新订阅,添加新评论并且负载会更高。
在流星中实施这样一个系统的最佳做法是什么?如何在没有大量过度发布的情况下解决这个问题?
答案 0 :(得分:0)
由于目前还没有官方支持加入,在社区的所有解决方案中
我发现https://github.com/englue/meteor-publish-composite此软件包非常有用,我在我的应用程序中使用它。
此示例完全符合您的要求https://github.com/englue/meteor-publish-composite#example-1-a-publication-that-takes-no-arguments
Meteor.publishComposite('topTenPosts', {
find: function() {
// Find top ten highest scoring posts
return Posts.find({}, { sort: { score: -1 }, limit: 10 });
},
children: [
{
find: function(post) {
// Find post author. Even though we only want to return
// one record here, we use "find" instead of "findOne"
// since this function should return a cursor.
return Meteor.users.find(
{ _id: post.authorId },
{ limit: 1, fields: { profile: 1 } });
}
},
{
find: function(post) {
// Find top two comments on post
return Comments.find(
{ postId: post._id },
{ sort: { score: -1 }, limit: 2 });
},
children: [
{
find: function(comment, post) {
// Find user that authored comment.
return Meteor.users.find(
{ _id: comment.authorId },
{ limit: 1, fields: { profile: 1 } });
}
}
]
}
]
});
//客户端
Meteor.subscribe('topTenPosts');
主要是被动