7
votes

Meteor Mettre à jour le profil utilisateur

Je n'ai aucune idée de ce qui ne va pas dans mon application. J'essaie de mettre à jour un profil d'utilisateur. Si un utilisateur a déjà un profil, il doit afficher les valeurs actuelles du profil. J'ai un simplepleschema attaché à la collection utilisateur. xxx pré>

J'ai une aide de modèle: p> xxx pré>

J'ai un crochet automatique p> xxx pré> p> avoir l'itinéraire suivant: p> xxx pré>

et enfin la publication suivante: p> xxx pré>

et voici la collection: xxx pré>

Je suis sûr que l'objet utilisateur est transmis dans la publication. Je ne peux pas mettre à jour le profil: Obtenir l'erreur suivante (à partir d'AutoForm Débogou): P>

Update Error: Object {$set: Object}
   $set: Object
        profile.firstName: "test_firstname"
        profile.gender: "Female"
        profile.lastName: "test_lastname"
        profile.organization: "test_organisation
        "username: "test_username"


3 commentaires

Pouvez-vous poster la partie pertinente de votre schéma?


Sûr. J'ai édité la question initiale pour l'inclure.


Utilisez-vous un paquet d'insécurité? Sinon, assurez-vous de configurer vos autorisations de collecte afin que les profils d'utilisateur puissent être mis à jour par des utilisateurs autorisés.


3 Réponses :


3
votes

Vous devez changer votre avant AutoForm Hooks .

var hooksObject = {
  before: {
    // Replace `formType` with the form `type` attribute to which this hook applies
    formType: function(doc) {
      // Potentially alter the doc
      doc.foo = 'bar';

      // Then return it or pass it to this.result()
      return doc; (synchronous)
      //return false; (synchronous, cancel)
      //this.result(doc); (asynchronous)
      //this.result(false); (asynchronous, cancel)
    }
  },


6 commentaires

Je devrais en effet avoir vu ça. Merci d'avoir souligné! Cependant, même après avoir changé à votre suggestion, cela ne fonctionne pas. Je peux insérer de nouveaux utilisateurs à Mongo, mais je ne peux pas sembler mettre à jour les utilisateurs existants. Dans l'AutoHook, j'ai une console.log qui génère le doc. Je ne vois pas d'erreurs, mais cela semble en quelque sorte comme si la base de données Mongo n'est pas mise à jour. Des idées?


Pas vraiment. La meilleure chose à faire serait de créer un exemple de reproductible minimal alors que cette question est loin de celle-ci. Bien que cela va créer une question à laquelle plus de personnes seront en mesure d'aider, sa valeur est également dans le processus, comme en le découpant, vous pouvez trouver la solution vous-même. Créez un exemple qui n'utilise pas les crochets d'autoforme, ne nécessite pas de flux: routeur, alanning: rôles, etc. Il y avait beaucoup à trébucher pour trouver le problème ci-dessus, et quelque chose que je me moque peut de masquer. un autre problème que vous avez. Quoi qu'il en soit, je vais essayer d'obtenir ce que j'ai travaillé à Météorpad et publier un lien.


J'ai vu une autre erreur du flux: le routeur n'aiment pas Meteor.userid () dans le bloc d'abonnements de route, car le routeur n'est pas réactif. Cependant, je crois que cela est assez inoffensif, car il utilisera toujours la valeur actuelle lorsqu'elle exécute - mais ne répondra pas si la valeur change.


Voici le Meteorpad


J'ai essayé ce que vous avez mis sur Meteorpad, et cela semble fonctionner ne le fait pas?


C'est ce que je pensais! ;)



2
votes

Il y a quelques petits problèmes, donc je ne sais pas comment aborder votre problème, mais voici quelques points à traiter.

Méthode de publication forte> p>

  • Variable locale utilisateur code> n'est jamais utilisé. Essayiez-vous d'utiliser ce? li>
  • Pas besoin d'inclure userid code> en tant que paramètre de fonction depuis que vous avez Accès à this.userid code> li>
  • Le profil de l'utilisateur actuel est publié par défaut. Vous n'avez pas besoin d'utiliser Publish / Subscribe à moins que vous souhaitiez inclure / exclure des champs, mais je définirais un météor.publish (null, ...) code> afin qu'il remplace la publication utilisateur actuelle par défaut li> ul>

    Remarque: Si vous supprimez la fonction de publication usersallForCustomer code>, n'oubliez pas de le supprimer de la route UpdateCustomerProfile EM> P> P >

    Utiliser global Helper CoururalUser code> strud> p>

    Voici comment mettre à jour votre modèle pour utiliser CoururalUser code> au lieu de GetUserers CODE> P>

    <template name="updateCustomerProfile">
      <div class="container">
        <h1>Edit User</h1>
        {{#with currentUser}}
          {{#autoForm collection="Users" doc=this id="profileForm" type="update"}}
            <fieldset>
              {{> afQuickField name='username'}}
              {{> afObjectField name='profile'}}
            </fieldset>
            <button type="submit" class="btn btn-primary">Update User</button>
            <a class="btn btn-link" role="button" href="{{pathFor 'adminDocuments'}}">Back</a>
          {{/autoForm}}
        {{else}}
          Nothing
        {{/with}}
       </div>
    </template>
    


0 commentaires

0
votes

Le météorpad a en effet résolu le problème. Il y avait une erreur dans l'assistant. En fait, le code d'origine était: xxx

donc dans l'extrait ci-dessus, j'utilisais un "événement" au lieu d'un "assistant". Ci-dessous est le code correct: xxx


0 commentaires