Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 清理“添加的子项”中的Firebase事件处理程序?_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 清理“添加的子项”中的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

在某些地方,我发现自己嵌套了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 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、 你能在里面使用一个同步循环吗?如果我想对现有的条做点什么的话,那就行了,但是我想在添加条的时候不断地对条做一些事情。考虑通知服务器或搜索索引。