在meteor帐户UI中迭代用户帐户

时间:2017-06-18 07:26:29

标签: meteor meteor-blaze meteor-accounts

我希望以表格格式显示所有用户信息,作为管理页面的一部分。我使用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)没有显示所有用户的信息。

谢谢。

2 个答案:

答案 0 :(得分:0)

多件事都错了:

  1. Meteor.users()只有在您发布时才会为您提供多个用户(或者您使用autopublish)。

  2. Meteor.user()将始终只为您提供当前登录的用户。因此,所有助手都无法按照您的计划运作。修改它们以使用Meteor.users.findOne({_id: id)})。您始终可以使用带参数的帮助程序。

  3. 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}}