web-dev-qa-db-ja.com

meteor.users.profileを部分的に更新する方法は?

モジュールaccounts-uiを使用して流星定型文に基づくminアプリを開始しました。

その要素の1つがプロファイルである呼び出しユーザーを呼び出すコレクションが作成されています。これもログイン名を取得する「name」と呼ばれる要素を持っています。

このテストアプリには、ユーザープロファイルを更新するオプションがあります。更新のデータは、フォームの送信から取得されます。ここにイベントリスナーを添付しました

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

したがって、データにはフォームからすべてが含まれます。ログイン名「name」はフォームに含まれていないため、データにも含まれていません。

更新前のusers.profile.name->更新後のusers.profile。*-> *はフォームのすべてに等しいが、「name」はなくなっている。

最後に、profile.nameフィールドは誰が保持できますか?最後に、users.profileにfromPLUSの「名前」をすべて入れたいと思います。

ヒントをありがとうございます。あなたが読んでいるように、私は流星に不慣れです-そして物事がどのように相互に関連しているかを理解しようとします。

マイケル

14
MBushveld

既存のプロファイルオブジェクト全体をデータオブジェクトに置き換えるため、名前キーを含め、以前に存在していたものはすべて消去されます。

プロファイル内で保持したいのが名前だけの場合は、独自のキーを使用して名前をデータオブジェクトに追加するだけです。そうすれば、プロファイルの下に配置する新しいオブジェクトには、古いオブジェクトと同等の名前フィールドがあります。

var data = SimpleForm.processForm(event.target);
data.name = Meteor.user().profile.name;
Meteor.users.update(Meteor.userId(), {$set: {profile: data}});
19
RevMen

次のように変更したい部分を更新しながら、古いプロファイルデータを簡単に保持できます。

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

「profile.someNewField」が引用符で囲まれていることを確認してください。

29
Quin