使用Meteor Presence,我可以返回在线用户的userId。我想看看如何取回用户对象。
Meteor.publish('userPresence', function() {
return Meteor.presences.find({}, {fields: {state: true, userId: true}});
});
正如你所看到我发布该集合并订阅它:
Meteor.subscribe('userPresence');
我有一个视图,其中包含每个块以获取所有在线用户:
<template name="presenceList">
<h1>{{onlineCount}}</h1>
{{#each onlineUsers}}
{{> presenceSingle}}
{{/each}}
</template>
此外,这是包含帮助程序的文件:
Template.presenceList.helpers({
onlineUsers: function() {
return Meteor.presences.find();
},
onlineCount: function() {
return Meteor.presences.find().count();
}
});
我最大的困难是在单个用户模板中返回用户名。
任何帮助都会很棒,谢谢。
答案 0 :(得分:1)
添加下划线包
mrt add underscore
然后您可以将您的onlineUsers更新为
onlineUsers: function() {
var users = _.map(Meteor.presences.find().fetch(), function(user) {
return Meteor.users.findOne({_id :user.userId})
});
return users;
}
我上面所做的就是使用下划线的_.map创建一个包含来自Meteor.users.findOne({_ id:user.userId})的返回对象的新数组,请参阅link
最后,您的在场单个模板
<template name="presenceSingle">
<p>{{_id}}</p>
<p>{{createdOn}}</p>
<p>{{emails.0.address}}</p>
<br/>
</template>
这里我将为每个用户的mongo文档返回_id,createdAt和电子邮件地址字段。您可以返回任何您喜欢的字段。请注意用于返回电子邮件地址的句柄语法。电子邮件是一个包含1个元素的数组,但我们使用emails.0访问元素,而不是电子邮件[0]
答案 1 :(得分:0)
你有从Meteor.presences.find()返回的文档中的用户ID吗?为什么不运行查询来从Mongo
获取单个用户对象Meteor.users.findOne({_id: theIDFromDoc});