14

我已经使用模块 accounts-ui 启动了一个基于流星样板的 min 应用程序。

有一个创建呼叫用户的集合,其中一个元素是配置文件,这又有一个名为“name”的元素,它获取登录名。

在此测试应用程序中,可以选择更新用户配置文件。更新的数据来自表单提交。我在这里附加了事件监听器

Template.profile.events({
  'submit form': function(event) {
    event.preventDefault();
    var data = SimpleForm.processForm(event.target);
    Meteor.users.update(Meteor.userId(), {$set: {profile: data}});
  }
});

因此,数据包含表单中的所有内容。登录名“名称”不包含在表单中,因此也不包含在数据中。

在更新之前我有 users.profile.name -> 包含更新后的数据我有 users.profile.* -> * 等于表单中的所有内容,但“名称”消失了。

最后:我可以保留谁的 profile.name 字段?最后,我喜欢在 users.profile 中包含来自 PLUS 的“名称”文件。

感谢您的任何提示,当您阅读时,我是流星的新手-并尝试了解事物如何联系在一起。

迈克尔

4

2 回答 2

29

您可以轻松地保留旧的配置文件数据,同时更新您想要更改的部分,如下所示:

Meteor.users.update(id, {$set: {"profile.someNewField": newData}});

确保“profile.someNewField”在引号中。

于 2015-07-22T23:48:22.507 回答
19

您将用您的数据对象替换整个现有的配置文件对象,因此之前存在的任何内容,包括名称键,都将被清除。

如果名称是您想要保留的配置文件中唯一的内容,只需将其添加到您的数据对象中,并使用其自己的密钥。这样,您放置在配置文件下的新对象将具有与旧对象等效的名称字段。

var data = SimpleForm.processForm(event.target);
data.name = Meteor.user().profile.name;
Meteor.users.update(Meteor.userId(), {$set: {profile: data}});
于 2015-03-12T16:03:30.340 回答