为当前用户配置文件meteor.js添加文档

时间:2016-01-04 17:56:51

标签: javascript meteor

我想创建一个表单,为注册用户添加其他个人资料详细信息(地址,电话号码)。 这是我的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>

有人知道如何插入(地址)和更新它的最简单方法吗?或者可以吗?

1 个答案:

答案 0 :(得分:0)

这离工作解决方案不远,但我看到了几个问题。

Meteor.users.update(Meteor.userId(), {$set: {profile: profile}})将覆盖配置文件对象,删除已经存储在那里的任何内容。此外,为用户提供更新用户文档的客户端权限是一种等待发生的安全灾难。理想情况下,您应该调用位于服务器文件夹中的流星方法,以便通过验证服务器上的更改来保持您的权限。

其次,如果你使用meteor的模板系统(blaze),你几乎不必使用jQuery选择器来检索值。相反,请查找HTML表单,以便您可以在单击提交按钮时使用模板事件轻松访问表单字段。

您应该完成Meteor tutorial,它将为您提供所有这些信息以及更多信息。