在某些地方,我发现自己嵌套了Firebase数据库侦听器。例如,我有一个foos
列表,每个列表都有一个bars
列表,我想在新bar
添加到任何foo
时执行某些操作:< / p>
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
,那嵌套的bar
child_added
侦听器是否已清理,或者我是否应该在某个.off(...)
侦听器中调用child_removed
?我怎么会这样做?
答案 0 :(得分:0)
通常,在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": ""
}
}
}
这样您就不需要嵌套事件处理程序。