2017-06-18 85 views
1

我想以表格形式显示所有用户信息,作为管理页面的一部分。我用流星账户的ui软件包也是一样。在流星帐户中迭代用户帐户UI

的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

@MichelFloyd我还没有创建出版物。出版物如何在这里有用?如何为这种情况下定义出版物?我对流星很陌生。 –

回答

0

发布的所有用户在服务器上执行以下操作:

Meteor.subscribe('allUsers'); 

你的助手将需要稍作修改然而由于@Sudhanshu建议:

Meteor.publish('allUsers',function(){ 
    return Meteor.users.find({},{fields: {emails: 1, profile: 1}}); 
    this.ready(); 
}); 

然后在客户端上使用订阅由于您正在循环播放用户的光标,因此您可以利用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}} 
+1

谢谢你帮助我。现在,即使在删除自动发布软件包后,该应用程序也会返回用户信息。此外,要获得电子邮件地址,它应该是:'​​{{emails。[0] .address}}' –

0

多的东西是错误的:

  1. Meteor.users()会给你多个用户只有当你把它们发布(或者你使用autopublish)。

  2. Meteor.user()将永远只给你当前登录的用户。所以你所有的助手都不会按照你的计划工作。修改它们以使用Meteor.users.findOne({_id: id)})。你总是可以使用带参数的助手。

  3. 流星默认发布只有profile而不是emails。因此,您必须在出版物中发布emails字段。

+0

感谢您清除这些概念。 –