2015-03-13 24 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