【发布时间】:2014-12-20 13:49:38
【问题描述】:
我有一个类似的对象:
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
}]}
我使用 Firebase 将此对象保存为:
var myDataRef = new Firebase(<...>);
myDataRef.child("saved_projects").child(authData.uid).update({'P3': _json});
但是,当我使用 Firebase on 方法检索相同的值并获取值为:
snapshot.val()
我得到了对象,但是带有 null 值的键被删除了,即我只得到了:
{"objects":[ {"type":"path", "originX":"center",
"originY":"center","left":48.59, "top":132.5,"width":64.5,
"height":173, "stroke":"#3f7cc4","strokeWidth":12
}]}
这给我带来了一些奇怪的问题,因为我使用的是Fabric.js,它需要这些值。
请帮忙!
编辑/更新(黑客)
目前,我正在使用一种奇怪的 HACK,在将对象存储到 Firebase 之前,我将所有 null 值转换为 0。但我想知道一个更好的方法。
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);
【问题讨论】:
-
Firebase 会删除具有空值的节点,在这方面我们无能为力。 firebase.com/docs/web/api/firebase/set.html "为新值传递 null 等效于调用 remove();该位置或任何子位置的所有数据都将被删除。"
-
这看起来像XY problem,您可能应该从您尝试解决的(有缺陷的?)用例开始。
标签: javascript object firebase