Javascript 如何管理应用程序到Firebase数据的动态路径

Javascript 如何管理应用程序到Firebase数据的动态路径,javascript,firebase,Javascript,Firebase,我的Firebase中有类似以下内容的数据(这是一个基于Javascript的web应用程序): 400和401指的是拍卖编号。1和2指每次拍卖中的单个地块。第三级是投标金额 我通过观察添加的child_向用户显示所有出价的列表,如下所示: dataRef.child('bids').child(auction).child(lotno).on('child_added', function(data){...}); dataRef.child('bids').child(auction).c

我的Firebase中有类似以下内容的数据(这是一个基于Javascript的web应用程序):

400和401指的是拍卖编号。1和2指每次拍卖中的单个地块。第三级是投标金额

我通过观察添加的child_向用户显示所有出价的列表,如下所示:

dataRef.child('bids').child(auction).child(lotno).on('child_added', function(data){...});
dataRef.child('bids').child(auction).child(lotno).on(...
应用程序首次加载时,尚未分配拍卖或批号。随着拍卖的进行,地块编号(甚至拍卖编号)将发生多次变化

在这种情况下,我对如何维护实时投标列表感到困惑。当应用程序第一次加载时,我的变量“auction”和“lotno”的值为“undefined”,因此我从Firebase得到一个“invalid path”错误

我也不确定如果变量(因此路径)发生变化,我的孩子会怎么样。添加的child_是否会加载新路径上的所有现有数据,并从此点开始监视新的子级


关于如何处理应用程序的初始状态(变量尚未填充)有什么建议吗?

因为您是这样构建查询的:

dataRef.child('bids').child(auction).child(lotno).on('child_added', function(data){...});
dataRef.child('bids').child(auction).child(lotno).on(...
每次
action
lotno
变量中的一个发生更改时,您都必须创建一个新的侦听器(并关闭现有的侦听器)

听起来一次只能有一个当前批次,这可能使将其建模到数据模型中更加有用:

bids
    400
        1
            50.00
        2
            60.00
    401
        1
            55.00
        current
            65.00
然后,一旦当前批次的竞标完成,您可以将其“退役”到其适当的批号槽,并使下一个批次成为当前批次。使用这样的数据结构,拍卖的侦听器可以始终监视当前的:

dataRef.child('bids').child(auction).child('current').on(...

我在下面的回答中提供了一些反馈。但我不太清楚你的问题是什么。如果我的答案不是你正在寻找的,考虑把你的问题中的代码扩展一点,以便它提供一个最小的、完整的、可验证的例子,你想问的问题是:我认为困惑的缺失部分(对我来说)是在拍卖过程中动态地创建新的听众(并将老听众关闭)。是否有关于如何正确执行此操作的文档?不知道你是否知道有什么好的例子。Firebase网站上的文档相当完整,可读性也很好。关闭侦听器是通过
关闭
完成的: