如何部分更新meteor.users.profile?
Posted
技术标签:
【中文标题】如何部分更新meteor.users.profile?【英文标题】:How to partly update meteor.users.profile? 【发布时间】:2015-05-14 18:57:51 【问题描述】:我已经使用模块 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 的“名称”字段。
感谢您的任何提示,因为您阅读了我是流星新手 - 并尝试了解事物如何联系在一起。
迈克尔
【问题讨论】:
Update meteor collection without removing or overriding existing fields的可能重复 【参考方案1】:您可以在更新要更改的部分时轻松保留旧的配置文件数据,如下所示:
Meteor.users.update(id, $set: "profile.someNewField": newData);
确保“profile.someNewField”在引号中。
【讨论】:
【参考方案2】:您正在用您的数据对象替换整个现有的配置文件对象,因此之前存在的所有内容(包括名称键)都将被清除。
如果名称是您想要保留的配置文件中唯一的内容,只需将其添加到您的数据对象中,并使用其自己的密钥。这样,您放置在配置文件下的新对象将具有与旧对象等效的名称字段。
var data = SimpleForm.processForm(event.target);
data.name = Meteor.user().profile.name;
Meteor.users.update(Meteor.userId(), $set: profile: data);
【讨论】:
谢谢,正是我想要的。 @Quin 的回答是一个不错的简单解决方案Meteor.users.update(id, $set: "profile.someNewField": newData);
以上是关于如何部分更新meteor.users.profile?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 UICollectionView 的部分以编程方式更新标签