清理`child_added`中的Firebase事件处理程序?

时间:2016-12-13 06:03:28

标签: javascript firebase firebase-realtime-database

在某些地方,我发现自己嵌套了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 ?我怎么会这样做?

1 个答案:

答案 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": ""
        }
    }
}

这样您就不需要嵌套事件处理程序。