我正试图弄清楚如何在流星中有条件地向客户端发送数据.我有两种用户类型,根据用户的类型,它们在客户端上的接口(因此它们所需的数据是不同的).
让我们说用户是类型counselor或student.每个用户文档都有类似的role: 'counselor'或role: 'student'.
学生们喜欢学生的具体信息sessionsRemaining,并counselor和辅导员都之类的东西pricePerSession,等等.
我如何确保Meteor.user()客户端上有我需要的信息,而且没有额外的信息?如果我登录作为一名学生,Meteor.user()应该包括sessionsRemaining和counselor,但如果我登录的辅导员.我认为我可能正在寻找的是有条件的出版物和流星术语中的订阅.
deb*_*lis 13
使用fields选项仅返回Mongo查询所需的字段.
Meteor.publish("extraUserData", function () {
var user = Meteor.users.findOne(this.userId);
var fields;
if (user && user.role === 'counselor')
fields = {pricePerSession: 1};
else if (user && user.role === 'student')
fields = {counselor: 1, sessionsRemaining: 1};
// even though we want one object, use `find` to return a *cursor*
return Meteor.users.find({_id: this.userId}, {fields: fields});
});
Run Code Online (Sandbox Code Playgroud)
然后在客户端上打电话
Meteor.subscribe('extraUserData');
Run Code Online (Sandbox Code Playgroud)
订阅可以在Meteor中重叠.因此,这种方法的优点在于,向客户端提供额外字段的发布功能与Meteor的幕后发布功能一起工作,该功能发送基本字段,如用户的电子邮件地址和配置文件.在客户端上,Meteor.users集合中的文档将是两组字段的并集.
| 归档时间: |
|
| 查看次数: |
3573 次 |
| 最近记录: |