我想创建一个表单,为注册用户添加额外的配置文件详细信息(地址、电话号码)。这是我的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>
有人知道如何插入(地址)并更新它的最简单方法吗?还是可以?
这离一个有效的解决方案不远了,但我看到了一些问题。
Meteor.users.update(Meteor.userId(), {$set: {profile: profile}})
将覆盖配置文件对象,擦除已经存储在那里的任何内容。此外,授予用户客户端更新用户文档的权限是一场等待发生的安全灾难。理想情况下,您应该调用位于服务器文件夹中的流星方法,这样您就可以通过验证服务器上的更改来保持严格的权限。
其次,如果您使用流星的模板系统(blaze),那么您几乎不需要使用jQuery选择器来检索值。相反,您可以查找HTML表单,以便在单击提交按钮时使用模板事件轻松访问表单字段。
你应该完成流星教程,它将为你提供所有这些信息和更多。