【发布时间】:2014-09-24 15:25:26
【问题描述】:
我刚启动 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 数组(这是一个普通的旧非反应性变量)的值已过时,这意味着它的结果set 也将过期。
这就是为什么就该光标而言,无需重新运行查询,Meteor 将很高兴地继续为最初的 30 个热门帖子无限发布相同的 30 个作者。
因此,除非发布的整个代码再次运行(以构造新的 userId 列表),否则光标将不再返回正确的信息。
基本上我需要的是:
如果 Post 发生任何变化,那么它应该有更新的用户列表。无需再次调用用户集合。我发现了一些用户完整的 mrt 模块。 link1 | link2 | link3
请分享你的观点!
-尼勒什
【问题讨论】:
-
我对您的问题投了反对票,因为您将问题从“如何使用已发布的记录集”完全更改为“如何进行反应式连接”。更糟糕的是,您从一篇关于完全相同的问题 (discovermeteor.com/blog/reactive-joins-in-meteor) 的文章中复制您的整个问题,该文章列出了 几个 解决方案。我现在完全不清楚您提出问题的目的。您对文章中提出的任何解决方案不满意吗?为什么?
-
Tobold,我不是在问响应式联接,我的问题是发布方法如何运作。我清楚地提到我想使用两个返回值。因为发布不是我可以调用的函数。所以我期待有某种方法可以通过调用某些东西来获得这两个值。谢谢你的回答。
-
从我的角度来看,问题是一样的,只是我更新了,因为我想描述更多。如果我复制一些描述我的问题的东西,那又有什么关系。你的downvoted是好的,那不是问题。我发布问题是因为我面临问题。希望你能理解。