2017-07-02 7 views
0

私は、クラウド機能を使用して、 'onWrite'イベントのレコードに短い一意のURLを生成して保存します。これは正常ですが、EmberFireを使用してEmberアプリケーションからレコードを保存すると、コールバックの引数としてモデルが返されますが、このモデルのURLは定義されていません。これをクライアントに返す方法はありますか?または、生成されたURLを取得するためにレコードを照会する必要がありますか?EmberFire:レコードの保存時にクラウド関数によって生成されたプロパティを取得する

これは私のクラウド機能コードがどのように見えるかです:ここでは

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 }); 
    }); 

は、フォームの送信を介してデータを保存し、私のコンポーネントです。私はいくつかの検証を処理するためにember-changesetというアドオンを使用していますが、これは問題に関連してはいけません。

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. 
      }) 
     } 
     }) 
    } 
}); 

答えて

0

あなたが書き込みした後、データベース内の場所に戻し、新たなデータの書き込みを行う機能を持っている場合は、あなたが戻ってそのデータを取得するために、クライアント上のその場所を聞いて維持する必要があります。 1回限りの読み取り(once())を使用せず、永続的なリスナー(on())を使用し、そのリスナーで、URLまたは機能によって生成されると予想されるものが得られていることを確認してください。これ以上必要ない場合は、リスナーを削除してください。

(申し訳ありませんが、私はEmberやRealtime Databaseで提供されている抽象概念についてはわかりません。参考に使用するプレーンJavaScript APIメソッドを提供しています)

関連する問題