2014-09-03 14 views
6

Dire che ho il seguente:Firebase ottenere il percorso completo di URL di riferimento in dataSnapshot (JavaScript API)

var firebaseARef = new Firebase("http://this.is.my/firebase/url/A/reference") 
var firebaseBRef = new Firebase("http://this.is.my/firebase/url/B/reference") 

Quando definisco i miei .on() funzioni, vorrei specificare un singolo gestore, e poi fare tutto della gestione in un posto nel mio codice, piuttosto che dover definire le funzioni in linea con la definizione .on(). Per illustrare:

var handleAllFirebaseStuff = function(dataSnapshot){ 
    var name = dataSnapshot.name(); //PROBLEM HERE: returns "reference", no way to distinguish! 
    switch(name){ 
     case "http://this.is.my/firebase/url/A/reference": //How do I get this full reference from dataSnapshot? 
      /* do stuff for A reference */ 
     case "http://this.is.my/firebase/url/B/reference": //How do I get this full reference from dataSnapshot? 
      /* do stuff for B reference */ 
     default: 
      break; 
    } 
} 

firebaseARef.on('value', handleAllFirebaseStuff); 
firebaseBRef.on('value', handleAllFirebaseStuff); 

Il problema è dataSnapshot.name() torneranno solo "reference" in entrambi i casi, il che rende impossibile distinguere tra i due riferimenti nella dichiarazione switch/caso!

Sono certo che dataSnapshot contenga queste informazioni da qualche parte, ma devo ancora scoprirlo in qualsiasi modo conveniente. Esplorando l'oggetto dataSnapshot nella console, trovo un oggetto sepolto all'interno di path che contiene (tra le altre cose) un array, usando l'esempio sopra, che conterrebbe ["firebase", "url", "A", "reference"], ma non c'è un modo semplice per accedervi.

Se avessi accesso a tale array, potrei ricostruire l'URL o trovare un modo più conveniente per gestire l'istruzione switch/case. Penso che una stringa completa del riferimento sarebbe più appropriata come valore facilmente accessibile da dataSnapshot.

+0

Stai cercando 'snapshot.ref(). ToString()'? –

+0

Questo è quello! Ciò che è documentato sull'API Javascript di Firebase sarebbe estremamente utile! Se vuoi fornire la risposta, lo accetterò volentieri ... – MandM

risposta

16

di tornare da un Snapshot per l'URL completo, si fa:

snapshot.ref().toString() 

La parte toString è un po 'contro-intuitivo. Spesso mi trovo a doverlo testare, per vedere se è davvero la strada da percorrere.

suggerimento Sarebbe bello se ci fosse anche un più esplicito getUrl metodo suggerimento

UPDATE:

Con le versioni SDK recenti ref is no longer a function, quindi dovrete usare:

snapshot.ref.toString(); 
+0

Sì! La documentazione API per 'DataSnapshot.ref()' nella sua interezza è, "Il riferimento Firebase per la posizione che ha generato questo DataSnapshot." C'è ovviamente più sepolto qui (cioè .ref(). ToString()) - vediamo un po 'più di documentazione! (o più utili metodi espliciti _int hint_) – MandM

+0

Inoltre, sono contento che toString() funzioni, ma essendo un metodo non documentato mi spaventa un po ', e se il metodo è completamente cambiato in funzionalità tra i rev di Firebase? (Non c'è alcuna garanzia che non lo farà!) Quindi, sono d'accordo con la vostra dichiarazione sul metodo esplicito con tutto il cuore - Firebase oughta muoversi su questo. – MandM

+0

Il fatto che 'ref.toString()' restituisca l'URL completo è documentato: https://www.firebase.com/docs/web/api/firebase/tostring.html "Ottiene l'URL assoluto corrispondente alla posizione di questo riferimento Firebase ". –

Problemi correlati