我的Firebase中的数据看起来像这样(这是一个基于Javascript的网络应用程序):
bids
400
1
50.00
2
60.00
401
1
55.00
2
65.00
400和401是指拍卖编号。 1和2是指每次拍卖中的单个拍品。第三级是出价金额。
我正在通过观看这样的child_added向用户显示所有出价的列表:
dataRef.child('bids').child(auction).child(lotno).on('child_added', function(data){...});
首次加载应用时,尚未分配竞价或批号。随着拍卖的进行,拍品编号(甚至可能是拍卖编号)会多次改变。
对于如何在这种情况下维护实时的出价列表,我感到很困惑。当应用程序首次加载时,我的变量"拍卖"和" lotno"有价值"未定义"因此我得到一条"无效路径"来自Firebase的错误。
我还不确定如果变量(因此路径)发生变化,我的child_added会发生什么。 child_added会在新路径上加载所有现有数据,并从那时开始观察新孩子吗?
关于如何处理应用程序初始状态的任何建议,其中变量尚未填充?
答案 0 :(得分:5)
由于您构建了这样的查询:
dataRef.child('bids').child(auction).child(lotno).on(...
每次off
或action
个变量之一发生更改时,您都必须创建附加新的侦听器(并转换lotno
现有的侦听器)。
听起来一次只能有一个当前批次,这可能会使对它进入数据模型的建模更有用:
bids
400
1
50.00
2
60.00
401
1
55.00
current
65.00
然后,当前批次的竞标结束后,您可以退休"它到正确的lotnumber槽并让下一批成为current
。使用这样的数据结构,您的拍卖听众始终可以观看current
:
dataRef.child('bids').child(auction).child('current').on(...