如何使用Meteor中的currentUser属性修改搜索结果

时间:2015-08-23 03:02:24

标签: meteor meteor-blaze meteor-helper

我有一个集合,其中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}}

1 个答案:

答案 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}}

我希望它可以完美地解决你的问题: - )