我列出了属于
用户的所有通知this.route('notifications', {
path: '/notifications',
template: 'notificationList',
waitOn: function() {
return Meteor.subscribe('notifications');
},
data: function() {
return Notifications.find(
{userId: Meteor.userId()},
{sort: {createdAt: -1}}
);
},
fastRender: true
});
我用
发布文档Meteor.publish("notifications", function () {
return Notifications.find(
{userId: this.userId},
{sort: {createdAt: -1}}
);
});
我很困惑在哪里做什么。我是否必须在Meteor.publish()
和data: ...
中过滤用户ID?我是否必须对两种功能进行排序?我已经看到也可以在Meteor.subscribe()
中进行排序和过滤。
在所有三个功能中几乎完全相同似乎有点多余。我这样做了吗?
答案 0 :(得分:3)
调用Meteor.publish时,通常需要进行排序,以便在应用限制时发送正确的文档。例如,如果您只要求10个项目,那么您需要先对它们进行排序,以确保您拥有正确的 10个项目,而不是10个随机结果。
客户的排序顺序与服务器的发布请求没有任何关系,并且不保证它们是相同的。例如,考虑将多个发布请求发布到客户端上的相同集合的情况,每个集合都有不同的排序顺序。将这些结果以有用的方式预先排序是不可能的。
因此,您通常还需要在访问客户端上的集合时请求对项目进行排序。排序不必与服务器上的排序相同(尽管通常是这样)。
对于Meteor.subscribe,您在那里传递的参数取决于您的发布功能的参数,因此您可以让您的客户端将排序顺序传递给发布功能。当您需要使用相同的发布函数根据排序顺序返回不同的结果时,这非常有用。此外,如果订阅和提供数据上下文的代码在同一个路由控制器中,那么您可以使用单个变量保存排序条件,从而减少代码重复和错误发生的可能性。