我刚启动 Meteor js,我在它的发布方法上苦苦挣扎。以下是一种发布方法。
//服务器端
Meteor.publish('topPostsWithTopComments', function() {
var topPostsCursor = Posts.find({}, {sort: {score: -1}, limit: 30});
var userIds = topPostsCursor.map(function(p) { return p.userId });
return [
topPostsCursor,
Meteor.users.find({'_id': {$in: userIds}})
];
});
// 客户端
Meteor.subscribe('topPostsWithTopComments');
现在我不知道如何在客户端上使用发布数据。我的意思是我想使用topPostsWithTopComments提供的数据
问题详细如下
当一个新帖子进入前 30 名列表时,需要发生两件事:
The server needs to send the new post to the client.
The server needs to send that post’s author to the client.
Meteor 正在观察第 6 行返回的 Posts 光标,因此将在添加新帖子后立即向下发送,确保客户端将立即收到新帖子。
但是,考虑在第 7 行返回的 Meteor.users 游标。即使游标本身是反应式的,它现在使用的 userIds 数组(这是一个普通的旧的非反应式变量)的过时值,这意味着它的结果集将是也过时了。
这就是为什么就该光标而言,无需重新运行查询,Meteor 将愉快地继续为最初的 30 个热门帖子无限发布相同的 30 个作者。
因此,除非发布的整个代码再次运行(构造一个新的 userId 列表),否则光标将不再返回正确的信息。
基本上我需要的是:
如果 Post 发生任何变化,那么它应该有更新的用户列表。无需再次调用用户集合。我发现了一些用户完整的 mrt 模块。 链接1 | 链接2 | 链接3
请分享您的观点!
-尼勒什