如何编辑并向Meteor中的当前用户添加新字段?

时间:2014-05-12 18:15:39

标签: javascript meteor

在Meteor中,当前用户只有一个“名称”字段。我想在first_name下添加last_nameprofile

我的user_edit.html表单:

<template name="userEdit">
  <div id="login-wrapper">
    <form id="login-form" action="action" class="form login-form">
      <div class="control-group">
        <div class="controls">
          <input name="first_name" type="text" value="" placeholder="First Name"/>
        </div>
      </div>
      <div class="control-group">
        <div class="controls">
          <input name="last_name" type="text" value="" placeholder="Last Name"/>
        </div>
      </div>
      <div class="control-group">
        <div class="controls">
          <input type="submit" value="Submit" id="submit-website-button" class="btn btn-primary"/>
        </div>
      </div>
    </form>
  </div>
</template>

我有一个用于编辑当前用户的表单:

我不太确定如何更新user_edit.js中的当前用户,并为名字和姓氏添加其他字段。以下代码不起作用。

Template.userEdit.events({

  'submit form': function(e) {
    e.preventDefault();

    var currentUserId = this._id;

    var userProperties = {
      first_name: $(e.target).find('[name=first_name]').val(),
      last_name: $(e.target).find('[name=last_name]').val()
    }

    User.update(currentUserId, {$set: userProperties}, function(error) {
      if (error) {
      // display the error to the user
      alert(error.reason);
      } else {
        Router.go('userPage', {_id: currentUserId});
      }
    });

  }

});

修改

以下是应用答案后我的JS文件的工作版本:

Template.userEdit.events({

  'submit form': function(e) {
    e.preventDefault();

    Meteor.users.update( Meteor.userId(),
      {
        $set: {
          'profile.first_name': $(e.target).find('[name=first_name]').val(),
          'profile.last_name': $(e.target).find('[name=last_name]').val(),
          'profile.cell_phone': $(e.target).find('[name=cell_phone]').val(),
          'profile.email': $(e.target).find('[name=email]').val(),
          'profile.business_name': $(e.target).find('[name=business_name]').val(),
          'profile.website': $(e.target).find('[name=website]').val()
        }
      },

      function(error) {
        if (error) {
        // display the error to the user
        alert(error.reason);
        } else {
          Router.go('userPage', {_id: Meteor.userId() });
        }
      }
    );
  }
});

1 个答案:

答案 0 :(得分:1)

有几件事。我没有使用Meteor的过去两次更新,所以可能会添加“用户”作为光标来更新当前用户,但根据我的经验,这是您更新当前用户的方式:

Meteor.users.update( Meteor.userId(), { $set: { 'profile.first_name': "example" } } );

另请注意我必须指定'profile.first_name',在您的代码段中,当用户仅允许编辑配置文件部分客户端时,您将尝试在用户对象的基础中设置first_name和last_name。最后我不确定你的模板上下文中有什么'这个'所以我会设置currentUserId = Meteor.userId(),这是一种获取当前用户id的便捷方式。