【问题标题】:How to manage dynamic path in app to Firebase data如何在应用程序中管理 Firebase 数据的动态路径
【发布时间】:2015-03-14 01:04:51
【问题描述】:

我的 Firebase 中有类似这样的数据(这是一个基于 Javascript 的网络应用):

bids
    400
        1
            50.00
        2
            60.00
    401
        1
            55.00
        2
            65.00

400 和 401 是指拍卖编号。 1 和 2 指的是每次拍卖中的单个批次。第三级是出价金额。

我通过查看 child_add 来向用户显示所有出价的列表,如下所示:

dataRef.child('bids').child(auction).child(lotno).on('child_added', function(data){...});

当应用首次加载时,尚未分配拍卖或批号。而且随着拍卖的进行,批号(甚至可能是拍卖号)会发生多次变化。

在这种情况下,我对如何维护实时出价列表感到困惑。当应用首次加载时,我的变量“auction”和“lotno”的值是“undefined”,因此我从 Firebase 收到“invalid path”错误。

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

关于如何处理尚未填充变量的应用初始状态的任何建议?

【问题讨论】:

  • 我在下面的答案中提供了一些反馈。但我不太清楚你的问题是什么。如果我的答案不是您正在寻找的,请考虑稍微扩展您问题中的代码,以便它提供一个最小的、完整、可验证的问题示例:@ 987654321@

标签: javascript firebase


【解决方案1】:

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

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

每次actionlotno 变量之一发生变化时,您都必须创建附加一个新侦听器(并将off 转换为现有侦听器)。

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

bids
    400
        1
            50.00
        2
            60.00
    401
        1
            55.00
        current
            65.00

然后,一旦对当前批次的竞标完成,您可以将其“退出”到其正确的批次编号位置,并让下一个批次成为current。使用这样的数据结构,您的拍卖听众可以一直在观看current

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

【讨论】:

  • 我认为(对我而言)难题的缺失部分是随着拍卖的进行动态地创建新听众(并关闭旧听众)。是否有关于如何正确执行此操作的文档?想知道你是否知道任何好的例子。
  • Firebase 网站上的文档相当完整且可读性强。关闭监听器是通过off: firebase.com/docs/web/guide/…
猜你喜欢
  • 2021-09-20
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
相关资源
最近更新 更多