我希望以表格格式显示所有用户信息,作为管理页面的一部分。我使用meteor accounts ui package也一样。
HTML代码为:
{{#each userList}}
<tbody>
<tr>
<th scope="row">*</th>
<td>{{infofullname}}</td>
<td>{{infosurname}}</td>
<td>{{infoemail}}</td>
</tr>
</tbody>
{{/each}}
问题在于显示当前用户的信息,而不是所有已注册的用户。迭代确实发生但是对于当前登录的用户。此外,电子邮件地址也未显示。
帮助代码是:
Template.students.helpers({
userList: function(){
return Meteor.users.find({});
},
infofullname: function(){
return Meteor.user().profile.fullname;
},
infosurname: function(){
return Meteor.user().profile.surname;
},
infoemails: function(){
return Meteor.user().emails.[0].address;
}
});
我面临以下问题: 1)电子邮件地址未显示。 2)没有显示所有用户的信息。
谢谢。
答案 0 :(得分:0)
多件事都错了:
Meteor.users()只有在您发布时才会为您提供多个用户(或者您使用autopublish
)。
Meteor.user()将始终只为您提供当前登录的用户。因此,所有助手都无法按照您的计划运作。修改它们以使用Meteor.users.findOne({_id: id)})
。您始终可以使用带参数的帮助程序。
Meteor默认只发布profile
而不是emails
。因此,您必须在出版物中发布emails
字段。
答案 1 :(得分:0)
在服务器上发布具有以下内容的所有用户:
Meteor.publish('allUsers',function(){
return Meteor.users.find({},{fields: {emails: 1, profile: 1}});
this.ready();
});
然后在客户端订阅:
Meteor.subscribe('allUsers');
你的帮助者需要稍微修改,因为@Sudhanshu建议,但是因为你在一个用户光标上循环,你可以利用this
作为循环内的单个用户对象。
Template.students.helpers({
userList() {
return Meteor.users.find({});
},
infofullname() {
return this.profile.fullname;
},
infosurname() {
return this.profile.surname;
},
infoemails: function(){
return this.emails.[0].address;
}
});
你也可以直接在火焰中访问嵌套属性,避免需要三个助手,例如:
{{#each userList}}
<tbody>
<tr>
<th scope="row">*</th>
<td>{{profile.fullname}}</td>
<td>{{profile.surname}}</td>
<td>{{emails.[0].address}}</td>
</tr>
</tbody>
{{/each}}