如何在 Meteor 中使用 currentUser 的属性修改搜索结果
How to modify the search result using the currentUser's attribute in Meteor
我有一个集合,其中 currentUser 插入 his/her 数据。
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
});
}
});
现在,我想向 currentUser 显示一个与他性别相反的人的列表。我该怎么做?我现在正在使用下面的助手,但这只是 returns 男性。当我将选择器更改为 "female" 时,它 returns 是女性。
Template.dashBoard.helpers({
genderIs: function(gender){
return this.gender === gender;
},
'people': function(){
return Data.find({gender: "male"});
}
});
我已经尝试了几种方法,但由于我缺乏经验,none 还是行得通。这是 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}}
正如评论所说,您可以在'profile'字段中保存用户的所有信息。因此,您的 'details' 模板应更改为:
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",它将是未定义的并且总是return "male".
终于,您可以轻松地通过dashboard.helpers使用数据return了:
{{#each people}}
<li><a href="#"> {{profile.name}} {{profile.age}} {{profile.gender}} </a></li>
{{/each}}
希望能完美解决你的问题:-)
我有一个集合,其中 currentUser 插入 his/her 数据。
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
});
}
});
现在,我想向 currentUser 显示一个与他性别相反的人的列表。我该怎么做?我现在正在使用下面的助手,但这只是 returns 男性。当我将选择器更改为 "female" 时,它 returns 是女性。
Template.dashBoard.helpers({
genderIs: function(gender){
return this.gender === gender;
},
'people': function(){
return Data.find({gender: "male"});
}
});
我已经尝试了几种方法,但由于我缺乏经验,none 还是行得通。这是 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}}
正如评论所说,您可以在'profile'字段中保存用户的所有信息。因此,您的 'details' 模板应更改为:
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",它将是未定义的并且总是return "male".
终于,您可以轻松地通过dashboard.helpers使用数据return了:
{{#each people}}
<li><a href="#"> {{profile.name}} {{profile.age}} {{profile.gender}} </a></li>
{{/each}}
希望能完美解决你的问题:-)