我的情况最好用以下代码描述:
Meteor.publish('users', function (name) {
return Users.find({name: name});
});
Meteor.publish('posts', function (userId) {
return Posts.find({userId: userId}, {sort: {insertDate: 1}});
});
用户有很多帖子。所以,当网址是
时http://example.com/john
因此,要查找特定用户的帖子,我需要知道用户的ID。
现在我有以下控制器:
UserController = RouteController.extend({
onBeforeAction: function () {},
waitOn: function () {
var userSub = Meteor.subscribe('user', this.params.name);
return [userSub];
},
data: function () { ... },
action: function () {
if (this.ready()) {
this.render('user');
}
else {
;//this.render('loading');
}
}
});
现在我只能waitOn
用户,但我也想等待帖子,但我怎么能这样做,因为订阅帖子我需要知道userId:
Meteor.subscribe('posts', user._id);
有什么建议吗?
答案 0 :(得分:5)
目前加入流星很棘手。在this post中可以找到很多好的信息。对于简单的反应连接,您通常可以直接在路径中执行它们(在"加入客户端"部分中进行了解释)。以下是您的用户/帖子加入的示例:
UserController = RouteController.extend({
waitOn: function() {
Meteor.subscribe('user', this.params.name);
},
data: function() {
return Users.findOne({name: this.params.name});
},
onBeforeAction: function() {
if (this.data()) {
var userId = this.data()._id;
this.subscribe('posts', userId).wait();
}
}
});
正如上面的评论所述,如果您正在寻找非反应性加入,您可以看到我的回答here。对于服务器上的反应性连接,我建议this question。