Подтвердить что ты не робот

Как частично обновить 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 от ПЛЮС "имя".

Спасибо за любой намек, поскольку вы читаете, что я новичок в метеор - и попытайтесь понять, как все связывается.

Майкл

4b9b3361

Ответ 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" находится в кавычках.