1

現在、アプリは動作していますが、なぜ動作するのかわかりません...

次のようなコードがありました。

var itemRef;

listRef.on('child_added', function(childSnapshot, prevChildName) {
    itemRef = childSnapshot;
});

問題は、itemRef後で使用しようとしたときに機能しなかったことです。itemRef.name()ただし、参照の正しい名前が返されたため、参照が機能していないことに気付くまでに数時間かかりました。

APIを検索しているときに、関数に出くわしました.ref().ref()API は、 「この DataSnapshot を生成した場所の Firebase 参照」を返すと述べています。これにより、関数は完全に無意味に聞こえましたが、試してみることにしました。

var itemRef;

listRef.on('child_added', function(childSnapshot, prevChildName) {
    itemRef = childSnapshot.ref();
});

.ref()「このDataSnapshotを生成した場所のFirebase参照」を返すだけなのに、なぜ私の参照が機能したのか、誰でも説明できますか。??

4

1 に答える 1

5

Firebase は、 Firebase 参照DataSnapshotsという 2 つの異なるタイプのオブジェクトを公開します。

Firebase 参照はパスのようなものです。Firebase 内の場所を指すだけです。これを使用して、データを設定したり、on() を使用してイベント コールバックをアタッチしたりします。

DataSnapshot は、ある時点で Firebase から取得したデータを保存します。データのみが含まれています。.child()、.val() などを呼び出してデータを読み取ることはできますが、それを使用して set() やその他の Firebase 操作を実行することはできません。

最初のコード スニペットは、Firebase 参照とは異なるスナップショットを保存しているため、機能しません。たまたま、両方のオブジェクトが同じように動作する .name() 関数を持っているため、ここで混乱が生じる可能性があります。

于 2012-07-23T21:30:55.650 に答える