2014-12-20 14 views
7

mam obiektu takich jak:Firebase nie zbawi klucze z wartości null

var _json = { "objects":[{ 
    "type":"path", "originX":"center", "originY":"center", "left":48.59, 
    "top":132.5, "width":64.5,"height":173, "fill":null,"stroke":"#3f7cc4", 
    "strokeWidth":12,"strokeDashArray":null 
}]} 

zapisać ten obiekt przy Firebase jak:

var myDataRef = new Firebase(<...>); 
myDataRef.child("saved_projects").child(authData.uid).update({'P3': _json}); 

Ale kiedy pobierać takie same użyciu Firebase on Sposób i uzyskać wartość jako:

snapshot.val() 

mam obiektu, ale klucze z null Wartości został usunięty tj Mam tylko:

{"objects":[ {"type":"path", "originX":"center", 
"originY":"center","left":48.59, "top":132.5,"width":64.5, 
"height":173, "stroke":"#3f7cc4","strokeWidth":12 
}]} 

To jest przyczyną mnie jakieś dziwne problemy, ponieważ używam Fabric.js i potrzebuje tych wartości. Proszę o pomoc!

EDIT/UPDATE (Hack)

Na razie używam dziwny hack, przed zapisaniem obiektu do Firebase mam konwersję wszystkich wartości null do 0. Ale chcę poznać lepszy sposób.

function recursivelyReplaceNullToZero(j) { 
    for (var i in j){ 
     if (typeof j[i] === "object") { 
      recursivelyReplaceNullToZero(j[i]); 
     } 
     if (j[i] === null) { 
      j[i] = 0; 
     } 
    } 
} 
recursivelyReplaceNullToZero(_json); 
+5

Firebase usuwa węzły, które mają wartości null, nie możemy w tym pomóc. https://www.firebase.com/docs/web/api/firebase/set.html "Podanie wartości NULL dla nowej wartości jest równoznaczne z wywołaniem remove(), wszystkie dane w tej lokalizacji lub jakiejkolwiek lokalizacji podrzędnej zostaną usunięte." –

+1

To wygląda na [problem XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378) i powinieneś zacząć od (błędnego?) Użycia przypadek, który próbujesz rozwiązać. – Kato

Odpowiedz

2

Na razie używam dziwny hack, przed zapisaniem obiektu do Firebase mam konwertujący wszystkie wartości null do 0. Ale chcę wiedzieć dużo ładniejszy sposób, proszę!