Как изменить результат поиска, используя атрибут currentUser в Meteor

У меня есть коллекция, в которую 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}}

person Kaiyes    schedule 23.08.2015    source источник
comment
Вы, вероятно, не хотите добавлять информацию о пользователе в отдельную коллекцию под названием Data. Просто добавьте имя, возраст и пол в свойство profile объекта пользователя, и все это просто сохранится в коллекции пользователей Meteor. docs.meteor.com/#/full/meteor_users Затем вы можете сделать что-то вроде Meteor.user().profile.gender чтобы вернуть пол текущего пользователя.   -  person fuzzybabybunny    schedule 23.08.2015


Ответы (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», оно будет неопределенным и всегда будет возвращать «мужской».

Наконец, вы можете легко использовать данные, возвращаемые с помощью dashboard.helpers:

{{#each people}}
  <li><a href="#"> {{profile.name}} {{profile.age}} {{profile.gender}} </a></li> 
{{/each}}

Я хотел бы, чтобы это могло решить вашу проблему идеально :-)

person Total Shaw    schedule 23.08.2015
comment
@Kaiyes Это равно if Meteor.user().profile.gender === "male" gender = "female" else gender = "male" - person Total Shaw; 24.08.2015
comment
@Kaiyes Нет. Это условный оператор в JavaScript. Подробнее см. здесь: -) - person Total Shaw; 24.08.2015
comment
Кроме того, если я сохраню данные внутри Meteor.users.profile , как мне их вернуть? ` Meteor.users.find().fetch(); возвращает объекты со всеми данными в консоли, но какой будет вызов монго? вернуть `Meteor.users.find({gender: gender}); ??? Ничего не возвращает - person Kaiyes; 24.08.2015
comment
Template.dashBoard.helpers({ 'people': function(){ var gender = Meteor.user().profile.gender; if (gender==="male") { gender = "female"; } else{ gender = "male"; }; return Meteor.users.find({gender: gender}); } }); Я пытался использовать их, но ничего не получается!!! html такой же - person Kaiyes; 24.08.2015
comment
@Kaiyes Вы должны сделать свой запрос следующим образом: Meteor.users.find({"profile.gender": gender}) - person Total Shaw; 24.08.2015
comment
классно, дай мне попробовать - person Kaiyes; 24.08.2015
comment
Template.tryy.helpers({ 'people': function(){ var gender = Meteor.user().profile.gender; if (gender==="male") { gender = "female"; } else{ gender =" male"; }; return Meteor.users.find({"profile.gender": gender}); } }); вот что я пытаюсь. Я понимаю основной принцип. Но я думаю, что я не понимаю синтаксис правильно - person Kaiyes; 24.08.2015
comment
выдает следующее сообщение об ошибке в консоли Exception in template helper: TypeError: Cannot read property 'profile' of undefined - person Kaiyes; 24.08.2015
comment
@Kaiyes Как видите, исключение должно произойти в Meteor.user().profile.gender, поэтому вы должны добавить условие if, чтобы определить, есть ли пользователь для входа в систему. Если нет, верните ноль. - person Total Shaw; 24.08.2015