this.userId没有显示用户

时间:2016-04-19 01:52:17

标签: meteor

我发布了用户和第二个名为joboffers的集合。 joboffers collection为雇主和候选人存储userIds。我希望在作业页面旁边显示候选名称,对于管理页面,但是我做的任何事情似乎都不起作用。所有的工作都显示但不是候选人姓名。在我的控制台中,我只是得到对象

路径:publish.js

// publish all jobs for admin to view
Meteor.publish('allJobs', function () {
  return JobOffers.find({});
});

Meteor.publish('allUsersWithJobs', function () {
  var offers = JobOffers.find({}, {fields: {candidateUserId: 1}}).fetch();
  var ids = _.pluck(offers, 'candidateUserId');

  options = { fields: {username: 1, emails: 1, "profile.firstName": 1, "profile.familyName": 1 } };
  return Meteor.users.find({ _id: { $in: ids } }, options);     
});

路径:alljoboffers.js

Template.alljoboffers.onCreated(function() {
  Meteor.subscribe("allJobs");
  Meteor.subscribe("allUsersWithJobs");

});

    Template.alljoboffers.helpers({
        alljoboffers: function() { 
            return JobOffers.find({});
        },
        candidateName: function() {     
            console.log(this);

            var user = this.userId;
            var candidate = (user && user.profile && user.profile.firstName);

            return candidate;
        },
    });

路径:alljoboffers.html

{{#each alljoboffers}}
    {{positionTitle}}

    {{#with candidateName}}
        {{profile.firstName}}
    {{/with}}
{{/each}}

1 个答案:

答案 0 :(得分:1)

您正在混合用户ID和用户对象。创建一个全局帮助程序以帮助保持关于如何管理它们的约定是一个好主意。这有助于减少混乱。例如:

Template.registerHelper('usernameById', function(userId) {
  var user = Meteor.users.findOne({_id: userId});
  return user && user.profile.firstName;
});

然后在你的模板中:

{{#each alljoboffers}}
  {{positionTitle}}
  {{usernameById candidateUserId}}
{{/each}}