Javascript 清理“添加的子项”中的Firebase事件处理程序?
在某些地方,我发现自己嵌套了Firebase数据库侦听器。例如,我有一个Javascript 清理“添加的子项”中的Firebase事件处理程序?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,在某些地方,我发现自己嵌套了Firebase数据库侦听器。例如,我有一个foo列表,每个都有一个条的列表,每当一个新的条添加到任何foo,我都想做些什么: firebase.database().ref('foos').on('child_added', function(fooSnap) { fooSnap.ref.child('bars').on('child_added', function(barSnap) { // do something with the n
foo
列表,每个都有一个条的列表,每当一个新的条添加到任何foo
,我都想做些什么:
firebase.database().ref('foos').on('child_added', function(fooSnap) {
fooSnap.ref.child('bars').on('child_added', function(barSnap) {
// do something with the new bar
});
});
有更好的方法吗
如果一个foo
被删除,那么这个嵌套的条添加的子对象
监听器是否被清理,或者我应该在一个子对象
删除的监听器中的某个地方调用.off(…)
?我该怎么做呢 通常,在NoSQL数据库中,采用更平坦的设计是一个好主意。例如,当前您有一个结构,如-
{
"foos": {
"F1": {
"foo_data": "",
"bars": {
"B1": {
"bar_data": ""
},
"B2": {
"bar_data": ""
}
}
},
"F2": {
"foo_data": "",
"bars": {
"B1": {
"bar_data": ""
},
"B2": {
"bar_data": ""
}
}
}
}
}
但你可以像下面这样把它展平-
{
"foos": {
"F1": {
"foo_data": "",
"bars": ["B1", "B2"]
},
"F2": {
"foo_data": "",
"bars": ["B3", "B4"]
}
},
"bars": {
"B1": {
"bar_data": ""
},
"B2": {
"bar_data": ""
},
"B3": {
"bar_data": ""
},
"B4": {
"bar_data": ""
}
}
}
这样,您就不需要嵌套事件处理程序。是否fooSnap.val()
包含新节点的所有子节点/子节点?i、 你能在里面使用一个同步循环吗?如果我想对现有的条做点什么的话,那就行了,但是我想在添加条的时候不断地对条做一些事情。考虑通知服务器或搜索索引。