我正在尝试创建个人资料页面,我需要在模板中显示个人资料名称和生物。问题是我无法获得每个配置文件对象的ID。如果我可以获得每个配置文件的ID,就像在book中使用postId一样。 Here下面的代码是我认为可行的方式,但没有。如果你告诉我如何获得ID,那将非常感谢。
Profile = new Meteor.Collection('profile');
Profile.allow({
update: ownsDocument
})
Profile.deny({
update: function(profileId, profile, fieldNames) {
return (_.without(fieldNames, 'bio').length > 0);
}
});
Accounts.onCreateUser(function(options, user){
Meteor.methods({
profile: function(postAttributes) {
var user = Meteor.user();
var profile = _.extend(_.pick(options.profile, 'bio'), {
userId: user._id,
profilename: user.username,
submitted: new Date().getTime(),
postsCount: 0, posts : []
});
var profileId = Profile.insert(profile);
return profileId;
}
});
return user;
});
答案 0 :(得分:1)
在discover meteor示例中,他们使用方法插入Post
然后返回其id。在您的情况下,在异步回调中插入新的Profile
,因此您无法返回ID。但是,您知道userId
,因此您可以使用它来获取个人资料。
服务器强>
Accounts.onCreateUser(function(options, user){
var user = Meteor.user();
var profile = _.extend(_.pick(options.profile, 'bio'), {
userId: user._id,
profilename: user.username,
submitted: new Date().getTime(),
postsCount: 0,
posts : []
});
Profile.insert(profile);
return user;
});
<强>客户端强>
Template.profile.profile = function () {
return Profiles.findOne({userId: Meteor.userId()});
};
答案 1 :(得分:0)
你似乎对Meteor的一些想法感到有些困惑。
首先,Meteor.methods({...})是可以使用Meteor.call({})称为客户端的函数
它们应该出现在顶层,而不是像Accounts.onCreateUser
这样的其他函数对于这个用例,我不知道为什么你需要一个方法。您要做的就是检索您将存储在将要发送到客户端的数据中的数据。
如果您使用基于帐户的软件包,那么您将自动获得一个适合您想要的Meteor.users集合。我不认为需要个人档案集
这是一个说明它的meteorpad:http://meteorpad.com/pad/xL9C8eMpcwGs553YD
注意我将bio存储在用户的配置文件部分中。这是因为用户可以默认编辑自己的配置文件部分,因此我可以使用Meteor.users.update(...)客户端。
这只是展示一些概念的一个例子。它确实有不好的做法。首先,我建议添加包account-ui并使用{{&gt; loginButtons}}帮助器。它为您提供错误检查等。我没有使用它的原因是因为我想展示如何允许用户在创建帐户之前输入他们的生物,以及如何在Accounts.onCreateUser中使用它。