如何在 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}}

希望能完美解决你的问题:-)