0

使用 Meteor Presence,我可以返回在线用户的用户 ID。我想看看如何取回用户对象。

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();
   }
});

我最大的困难是在我的单用户模板中返回用户名。

任何帮助都会很棒,谢谢。

4

2 回答 2

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}) 返回的对象创建一个新数组,请参阅链接

最后,你的存在单模板

<template name="presenceSingle">
  <p>{{_id}}</p>
  <p>{{createdOn}}</p>
  <p>{{emails.0.address}}</p>
  <br/>
</template>

在这里,我将返回每个用户的 mongo 文档的 _id、createdAt 和电子邮件地址字段。您可以返回任何您喜欢的字段。请注意用于返回电子邮件地址的把手语法。emails 是一个包含 1 个元素的数组,但我们使用 emails.0 而不是 emails[0] 访问这些元素

于 2013-05-15T17:48:17.190 回答
0

您有从 Meteor.presences.find() 返回的文档中用户的 ID 对吗?为什么不运行查询以从 Mongo 获取单个用户对象

Meteor.users.findOne({_id: theIDFromDoc});
于 2013-05-15T14:47:12.027 回答