Как частично обновить meteor.users.profile?
Я запустил приложение min, основанное на шаблоне метеоритов с учетными данными модуля - ui.
Существует коллекция, созданная пользователями вызовов, одним из ее элементов является профиль, у этого снова есть элемент с именем "имя", который получает имя для входа.
В этом тестовом приложении есть опция обновления профиля пользователя. Данные для обновления поступают из формы submit. Я добавил слушателя событий здесь
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 → содержит данные
после обновления у меня есть user.profile. * → * равно всему из формы, но "имя" ушло.
Наконец: кто может сохранить поле profile.name? В конце мне нравится иметь в user.profile everthing от ПЛЮС "имя".
Спасибо за любой намек, поскольку вы читаете, что я новичок в метеор - и попытайтесь понять, как все связывается.
Майкл
Ответы
Ответ 1
Вы заменяете весь существующий объект профиля своим объектом данных, поэтому все, что было до этого, включая ключ имени, будет уничтожено.
Если имя является единственным в профиле, которое вы хотите сохранить, просто добавьте его в свой объект данных со своим собственным ключом. Таким образом, новый объект, который вы размещаете под профилем, будет иметь поле имени, эквивалентное старому.
var data = SimpleForm.processForm(event.target);
data.name = Meteor.user().profile.name;
Meteor.users.update(Meteor.userId(), {$set: {profile: data}});
Ответ 2
Вы можете легко сохранить старые данные профиля при обновлении частей, которые вы хотите изменить следующим образом:
Meteor.users.update(id, {$set: {"profile.someNewField": newData}});
Убедитесь, что "profile.someNewField" находится в кавычках.