Meteor用户

时间:2015-10-22 09:28:41

标签: meteor

我有一个应用程序,我正在使用模板助手。我有以下代码:

UI.registerHelper('ProfileNameByUserId', function(userid) {
  console.log('Userid: ' + userid);
  var user = Meteor.users.findOne({'_id': userid});
  console.log.log('User:' + user);
  return user.username 
});

我在我的模板中调用它如下:

{{#each getDocuments}}
   {{ProfileNameByUserId userid}}
{{/each}}

并在模板助手中:

Template.documentsIndex.helpers({
  getDocuments: function () {
    return Documents.find({}, { sort: { createdAt: -1 }});
  }
});

发布和订阅如下:

Routes.route('/documents', {
  name: 'documents',
  subscriptions: function (params, queryParams) {
    this.register('documentsIndex', Meteor.subscribe('documents'));
  },
  action: function (params, queryParams) {
      .....
    });
  }
});

Meteor.publish('documents', function () {
   return Documents.find({})
});

我确定userId已传递,因为console.log语句显示正确的id。问题是用户“未定义”,因此无法找到用户名。

我正在使用SimpleSchema定义用户架构,如下所示:

Users = Meteor.users;

Schema = {};

Schema.UserProfile = new SimpleSchema({
    firstName: {
        type: String,
        optional: true
    },
    lastName: {
        type: String,
        optional: true
    },
    gender: {
        type: String,
        allowedValues: ['Male', 'Female'],
        optional: true
    },
});

Schema.User = new SimpleSchema({
    username: {
        type: String,
        optional: true
    },
    emails: {
        type: Array,
        optional: true
    },
    "emails.$": {
        type: Object
    },
    "emails.$.address": {
        type: String,
        regEx: SimpleSchema.RegEx.Email
    },
    "emails.$.verified": {
        type: Boolean
    },
    createdAt: {
        type: Date,
        optional: true,
        denyUpdate: true,
        autoValue: function() {
            if (this.isInsert) {
                return new Date();
            }
        }
    },
    profile: {
        type: Schema.UserProfile,
        optional: true
    },
    services: {
        type: Object,
        optional: true,
        blackbox: true
    },
    roles: {
        type: [String],
        optional: true
    }
});

Meteor.users.attachSchema(Schema.User);
});

使用Users.findOne()替换模板助手中的Meteor.users.findOne()也不起作用。

知道为什么用户仍未定义?

1 个答案:

答案 0 :(得分:1)

您需要为要显示的用户添加发布和订阅。

在最常见的情况下,所有用户都已发布:

Meteor.publish('allUsers', function () {
    return Meteor.users.find();
});

在您的路线中订阅此内容,您的助手中不会定义用户。

请注意,您应该只发布您需要的用户,但由于我不了解您的应用程序结构,因此无法向您提供查询。