我有一个应用程序,我正在使用模板助手。我有以下代码:
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()也不起作用。
知道为什么用户仍未定义?
答案 0 :(得分:1)
您需要为要显示的用户添加发布和订阅。
在最常见的情况下,所有用户都已发布:
Meteor.publish('allUsers', function () {
return Meteor.users.find();
});
在您的路线中订阅此内容,您的助手中不会定义用户。
请注意,您应该只发布您需要的用户,但由于我不了解您的应用程序结构,因此无法向您提供查询。