这或多或少是this question的后续行动。
我正在尝试显示“朋友”,我有一个我发送请求的朋友列表(称为已发送):
{{#each sent}}
<p>{{find_user _id}}</p>
{{/each}}
发送的内容如下:
Template.friends.sent = function () {
return Notifications.find({from: Meteor.userId(), // to, and from are now userIds and not the user like in the original question.
type: 'friendship'});
}
对计数的查询给出了七个。我的find_user模板定义如下:
Template.friends.find_user = function (id) {
return Meteor.users.find({_id: id});
}
如何从用户ID中获取电子邮件?做类似的事情:
{{(find_user _id).emails.[0].address}}
失败,但是:
Expected IDENTIFIER.
答案 0 :(得分:1)
首先看来,您正在迭代来自Notifications集合的游标,然后使用Notification记录的_id调用模板上的find_user方法。您需要使用文档的from字段,因为它是包含userId的字段。
接下来,您将至少要重写find_user方法,以便它不接受参数。您可以从帮助程序中访问相同的数据,因为this
设置为当前数据上下文。
Template.friends.find_user = function () {
return Meteor.users.find({_id: this.from}); //note the this.from
}
然后,只要您为当前用户发布该数据,您就可以通过模板帮助程序访问该电子邮件地址。
{{from_user.emails.0.address}}
就个人而言,我喜欢使用Meteor的集合转换来扩展我的模型,原型可以像模板助手那样使用。
//first we create our collection and add a transform option
Notifications = new Meteor.Collection("notifications", {
transform: function(document){
return new Notification(document);
}
});
//next we create our constructor
Notification = function(document){
_(this).extend(document);
};
//Then add some prototypal methods that we can use in our templates.
Notification.prototype = {
fromUser: function(){
return Meteor.users.findOne(this.from);
}
};
现在我们可以在我们的模板中使用它:
{{fromUser.emails.0.address}}
我们还可以通过使用用户_transform
属性来设置一个转换用户文档的函数,然后再向它们添加方法,从而使这一步更进一步。
//transform each user document into a new User instance
Meteor.users._transform = function(document){
return new User(document);
};
//User constructor
User = function(document){
_(this).extend(document);
};
//and finally the User prototype with methods
User.prototype = {
defaultEmail: function(){
return this.emails && this.emails[0].address;
}
};
现在作为最终结果,您可以像这样使用它:
{{#each sent}
<p>{{fromUser.defaultEmail}}</p>
{{/each}}