【发布时间】:2017-03-07 00:57:36
【问题描述】:
我的 firebase 数据库具有以下结构:
{
"gateways_pr" :{
"gateway_1":{
"avisos" : {
"00":{
"aviso_1" : "0",
"aviso_2" : "0"
},
"01":{
"aviso_1" : "0",
"aviso_2" : "0"
}
}
}
}
}
我有一个小的演示 javascript 网页正在监听 gateways_pr/gateway_1/avisos 中的 child_change:
var gateWayRef = firebase.database().ref("gateways_pr/gateway_1/avisos");
gateWayRef.on('child_changed',function(data){
console.log("CHILD_CHANGE");
console.log(data.val());
var datos = data.val();
console.log(datos);
});
当我更改例如 gateway_1/avisos/00/aviso_1 并将其设置为 2 时,我可以使用 chrome 开发人员工具跟踪更改,查看 websocket 的框架并收到:
{"t":"d","d":{"b":{"p":"gateways_pr/gateway_1/avisos/00/aviso_1","d":"2"},"a":"d"}}
所以我只收到所做的更改。
问题是,在我的代码中,data.val() 具有以下值:
{aviso_1: "2", aviso_2: "0"}
调用 data.ref.path.toString() 返回:
/gateways_pr/gateway_1/avisos/00
这意味着 Firebase API 会向您显示其属性已更改的子级以下的所有内容(在本例中为 00)。
无论如何它都知道变化是什么(在这种情况下应该返回“aviso_1”)?
到目前为止,我发现的唯一解决方法是让我的代码能够倾听每个孩子的声音。在这种情况下,我应该收听 gateways_pr/gateway_1/avisos/00 和 gateways_pr/gateway_1/avisos/01,但是如果我向“avisos”添加新条目,我也应该开始收听它们,最后我的程序可以结束收听给成千上万的推荐人。
【问题讨论】:
标签: javascript firebase firebase-realtime-database