在开始之前,我已按照此处的步骤进行操作:Meteor Querying other users by email
我已阅读有关发布用户的Meteor文档以及如何添加比id,username和profile更多的字段。尽管存在所有这些问题,我的情况仍然存在。
我正在尝试访问其他用户的电子邮件地址,而不仅仅是当前登录的用户。我有2个需要此访问权限的模板。第一个模板工作,并能够访问它。第二个模板无法使用。
以下是我发布电子邮件字段和订阅的设置代码(我也尝试过不指定'地址'[例如字段:{电子邮件:1}],但结果相同)
if (Meteor.isServer) {
Meteor.publish("allUsers", function () {
return Meteor.users.find({});
});
Meteor.publish("allUserData", function () {
return Meteor.users.find({}, {fields: {"emails.address": 1}});
});
};
if (Meteor.isClient) {
Meteor.subscribe("allUsers");
Meteor.subscribe("allUserData");
};
以下是模板中的代码:
Template.createPartner.events({
'click .setup-partner' : function(event, template) {
var partner = Meteor.users.findOne({"emails.address": 'example@mail.com' }); <-- works
}
});
以下是模板中不起作用的代码:
Template.infoSelect.partnerEmail = function() {
var partnerId = Meteor.user().profile.partnerId; <-- works
var partner = Meteor.users.findOne({_id: partnerId}); <-- works but only _id and profile are returned
return partner.emails[0].address; <-- throws exception because the 'emails' field doesn't exist
};
我也试过这个,但没有区别:
var partner = Meteor.users.find({_id: partnerId}, {fields: {"emails.address": 1}});
为什么我在第二个模板中看不到用户的电子邮件地址,但我可以在第一个模板中看到?
答案 0 :(得分:4)
我认为这是因为你订阅了两套相同的系列。 Meteor使用第一个订阅而忽略第二个订阅。我不确定为什么它有一次适用。
如果删除第一个订阅并使用第二个订阅它应该有效,基本上删除行:
Meteor.subscribe("allUsers");
还有一个提示。您可以将电子邮件功能更改为:
Template.infoSelect.partner = function() {
var partnerId = Meteor.user().profile.partnerId; <-- works
var partner = Meteor.users.findOne({_id: partnerId}); <-- works but only _id and profile are returned
return partner;
};
你的车把会是:(它只会为你的合作伙伴变量打开更多选项,所以你也可以通过名字来引用他/她)
<template name="infoSelect">
{{partner.email.0.address}}
{{partner.profile.name}} <!--If you have configured profiles -->
</template>