我想创建一个表单,为注册用户添加其他个人资料详细信息(地址,电话号码)。 这是我的js文件:
Template.userProfileEdit.events({
'submit form': function(event, template){
event.preventDefault();
var addressVar = template.find('#inputaddress');
var profile = {};
var fields = template.findAll('input[type="text"]');
for(var i = 0; i<fields.length; i++) {
profile[$(fields[i]).attr('name')] = $(fields[i]).val();
}
if(Meteor.users.update(Meteor.userId(), {$set: {profile: profile}})) {
$(template.find('#thirdNodal')).modal('hide');
}
}
});
Template.userProfileEdit.helpers({
address: function(){
return Meteor.user().profile.address;
}
});
Accounts.findUserByUsername = function (username) {
return Accounts.findUserByQuery({
username: username
});
};
Accounts.findUserByEmail = function (email) {
return Accounts.findUserByQuery({
email: email
});
};
这是我的html表单:
<tr>
<td>Address</td>
<td>{{currentUser.profile.address}}</td>
</tr>
有人知道如何插入(地址)和更新它的最简单方法吗?或者可以吗?
答案 0 :(得分:0)
这离工作解决方案不远,但我看到了几个问题。
Meteor.users.update(Meteor.userId(), {$set: {profile: profile}})
将覆盖配置文件对象,删除已经存储在那里的任何内容。此外,为用户提供更新用户文档的客户端权限是一种等待发生的安全灾难。理想情况下,您应该调用位于服务器文件夹中的流星方法,以便通过验证服务器上的更改来保持您的权限。
其次,如果你使用meteor的模板系统(blaze),你几乎不必使用jQuery选择器来检索值。相反,请查找HTML表单,以便您可以在单击提交按钮时使用模板事件轻松访问表单字段。
您应该完成Meteor tutorial,它将为您提供所有这些信息以及更多信息。