2015-03-13 25 views
2

我在火力地堡看起来是这样的(这是一个基于JavaScript的Web应用程序)的数据在应用动态路径:如何管理到火力地堡数据

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){...}); 

当应用程序第一次加载,还有尚未分配没有拍卖或批号。随着拍卖的进行,批号(甚至可能是拍卖号码)将会改变很多次。

我很困惑如何在给定此场景的情况下保持实时出价清单。当应用第一次加载时,我的变量“auction”和“lotno”的值为“未定义”,因此我从Firebase中收到“无效路径”错误。

我也不确定如果变量(以及路径)发生变化,我的child_added会发生什么。请问child_added会在新路径上加载所有现有的数据,并从这一点开始观察新的孩子吗?

有关如何处理应用程序初始状态的任何建议,其中尚未填充变量?

+0

我提供了以下回答一些反馈。但是我不清楚你的问题是什么。如果我的答案不是你想要的,可以考虑在你的问题中扩展一些代码,以便它提供了一个最小的,*完整的,可验证的问题示例:http:// stackoverflow。 com/help/mcve – 2015-03-13 17:06:14

回答

5

既然你构建这样的查询:

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

您必须创建附加新的侦听器(并打开off现有的听众)每次的actionlotno变量变化一次。

听起来好像只能有一个当前很多的时间,这可能使该模型为你的数据模型更加有用:

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(... 
+0

随着拍卖的进展,我认为对于这个难题(对我而言)缺失的部分是动态创建新的听众(并关闭老听众)。是否有文件说明如何正确地做到这一点?想知道你是否知道任何好的例子。 – 2015-03-13 17:58:18

+3

Firebase网站上的文档相当完整且非常易读。关闭监听器是通过“off”完成的:https://www.firebase.com/docs/web/guide/retrieving-data.html#section-detaching-callbacks – 2015-03-13 18:15:40