从您的解释来看,您似乎想仔细控制哪些文档实际发布给客户端,而不是发布所有文档并缩小客户端上的结果集。在这种情况下,我建议首先在服务器上定义一个发布,如下所示:
Meteor.publish('todosByTeamIdAndSearch', function(todoTeamId, searchParameter) {
var todosCursor = null;
// Check for teamId and searchParameter existence and set
// todosCursor accordingly. If neither exist, return an empty
// cursor, while returning a subset of documents depending on
// parameter existence.
todosCursor = Todos.find({teamId: todoTeamId, ...}); // pass parameters accordingly
return todosCursor;
});
如需详细了解如何定义更细化的发布,请查看this。
使用上述定义的发布,您可以像这样设置您的路线:
Router.route('/team/:_id/search/:search', {
name: 'team',
waitOn: function() {
return Meteor.subscribe('todosByTeamIdAndSearch', this.params._id, this.params.search);
},
data: function() {
if(this.ready()) {
// Access your Todos collection like you normally would
var todos = Todos.find({});
}
}
});
从示例路由定义中可以看出,您可以在调用Router.route() 函数时直接按照您希望看到的方式定义路由的路径,并像在@ 中一样访问直接传入的参数987654327@ 路由选项。由于出版物已按照我的建议进行定义,因此您只需将这些路由参数直接传递给 Meteor.subscribe() 函数即可。然后,在data 路由选项中,一旦您检查了您的订阅是否准备就绪,您就可以像往常一样访问Todos 集合,如果您不需要这样做,则无需进一步缩小结果集。
要了解有关如何配置路由的更多信息,请查看以下两个链接:Iron Router Route Parameters 和 Iron Router Route Options