我有一个集合,其中currentUser插入他/她的数据。
Template.details.events({
'submit form': function(event) {
event.preventDefault();
var currentUser = Meteor.userId();
var name = event.target.nam.value;
var age = event.target.nombor.value;
var gender = event.target.sex.value;
Data.insert({
name : name,
age: age,
gender: gender,
createdBy: currentUser
});
}
});
现在,我想向当前用户展示与其性别相反的人员名单。我该怎么做?我正在使用下面的助手,但这只会让男性回归。当我将选择器更改为“女性”时,它将返回女性。
Template.dashBoard.helpers({
genderIs: function(gender){
return this.gender === gender;
},
'people': function(){
return Data.find({gender: "male"});
}
});
我尝试了几种方法,但由于我的经验不足,所以没有一种方法可行。这是HTML
<ul>
{{#each people}}
<li> <a href="#"> {{name}} {{age}} {{gender}} </a> </li>
{{/each}}
</ul>
我尝试了类似的东西,但它没有用。
{{#if genderIs "female"}}
{{#each people "male"}}
<li> <a href="#">
{{name}} {{age}} {{gender}}
</a>
</li>
{{/each}}
{{else}}
{{#each people "female"}}
<li> <a href="#">
{{name}} {{age}} {{gender}}
</a>
</li>
{{/each}}
{{/if}}
答案 0 :(得分:1)
正如评论所说,您可以在“个人资料”字段中保存用户的所有信息。因此,您的“详细信息”模板应更改为:
Template.details.events({
'submit form': function(event) {
event.preventDefault();
var currentUser = Meteor.userId();
var name = event.target.nam.value;
var age = event.target.nombor.value;
var gender = event.target.sex.value;
Meteor.users.update({ // using update method to update user information
_id: currentUser
},
{
$set:{
"profile.name": name,
"profile.age": age,
"profile.gender": gender
}
});
});
然后,修改仪表板助手:
Template.dashBoard.helpers({
genderIs: function(gender){
return Meteor.user().profile.gender === gender;
}, // you may not need this function in your app
'people': function(){
var gender = Meteor.user().profile.gender === "male" ? "female" : "male"
return Data.find({gender: gender});
}
});
但是你应该注意这里,如果你没有设置字段“profile.gender”,它将是未定义的并且总是返回“male”。
最后,您可以轻松地使用dashboard.helpers返回的数据:
{{#each people}}
<li><a href="#"> {{profile.name}} {{profile.age}} {{profile.gender}} </a></li>
{{/each}}
我希望它可以完美地解决你的问题: - )