2017-07-02 4 views
0

J'utilise une fonction Cloud pour générer une courte URL unique sur un enregistrement de l'événement 'onWrite' et l'enregistrer. Cela fonctionne bien, mais lorsque je sauvegarde un enregistrement de mon application Ember à l'aide d'EmberFire, je récupère un modèle en tant qu'argument d'un rappel, mais l'URL de ce modèle n'est pas définie. Y a-t-il un moyen de renvoyer cela au client? Ou dois-je interroger l'enregistrement pour obtenir l'URL générée?EmberFire: Obtention de la propriété générée par Cloud Fonction lors de la sauvegarde de l'enregistrement

Voici comment mon code fonction Cloud ressemble:

exports.generateUrl = functions.database.ref('/tournaments/{tid}') 
    .onWrite(event => { 
    if (event.data.previous.exists()) { 
     return; 
    } 
    if (!event.data.exists()) { 
     return; 
    } 

    const url = shortid.generate(); 

    return event.data.ref.update({ url }); 
    }); 

Voici mon composant qui enregistre les données par la soumission de formulaire. J'utilise un module appelé ember-changeset pour gérer certaines validations, mais cela ne devrait pas être lié au problème.

export default Ember.Component.extend({ 

    submit(e) { 
    e.preventDefault(); 

    let snapshot = this.changeset.snapshot(); 

    return this.changeset 
     .cast(Object.keys(this.get('schema'))) 
     .validate() 
     .then(() => { 
     if (this.changeset.get('isValid')) { 
      return this.changeset 
      .save() 
      .then((result) => { 
       // Here, result.get('url') is undefined. 
      }) 
     } 
     }) 
    } 
}); 

Répondre

0

Si vous avez une fonction qui écrit de nouvelles données à un emplacement dans la base de données après une écriture, vous devrez continuer à écouter cet endroit sur le client afin d'obtenir les données de retour. N'utilisez pas une lecture unique (once()), utilisez un écouteur persistant (on()) et, dans cet écouteur, assurez-vous d'obtenir l'URL ou tout ce que vous attendez de la fonction. Ensuite, supprimez cet écouteur si vous n'en avez plus besoin.

(Désolé, je ne connais pas Ember ou les abstractions qu'il fournit autour de la base de données en temps réel - Je vous donne les méthodes API JavaScript simples que vous utiliseriez sur une référence.)