У меня есть приложение, в котором я использую помощник шаблона. У меня есть следующий код:Meteor UI helper with Meteor.users
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 показывает правильный идентификатор. Проблема в том, что пользователь «undefined», поэтому он не может найти имя пользователя.
Я использую 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);
});
Замена Meteor.users.findOne() в помощнике шаблона с Users.findOne() не работает.
Любая идея, почему пользователь остается неопределенным?
Я заметил несколько вещей, которые могут не работать в вашем коде, я могу проверить его позже в моем проекте. Пока взгляните на мой ответ, он должен работать нормально – KG32
Отредактированный исходный вопрос, чтобы включить схему и паб/sub. – wiwa1978