2016-11-11 73 views
1

我試圖從子節點數據獲取密鑰。在JavaScript中獲取子節點的密鑰Firebase

$(document).on('click', '#enter', getName); 

function getName() { 

    name = $('#user').val().trim(); 
    database.ref('players/' + name).push({ 
     name: name 
    }) 
} 

database.ref('players/' + name).child(name).on("child_added", 
    function(childSnapshot){ 

     var childKey = childSnapshot.key; 
     var childData = childSnapshot.val; 
     console.log('key', childKey) 
     console.log('data', childData) 

    }, function (errorObject) { 

     console.log("The read failed: " + errorObject.code); 
    }) 
}) 

在快照功能,當我控制檯日誌childKey,它顯示的關鍵是用戶,這是我在ref('players/' + name)創建的路徑名。但我需要嵌套在name節點內的節點的密鑰。我的childSnapshot函數中出現錯誤,說明.child(name) is an invalid path。還說,

路徑必須爲非空字符串,不能包含 「」, 「#」, 「$」, 「[」 或 「]」

目前我創建數據到火力地堡它看起來像這樣:

-players 
    -Johnson 
    -KWH4mjWbOuptod_vV1o 
     name: "ajks" 

我需要得到johnson下鍵,該字母和數字的長字符串,所以我可以引用特定節點,並添加數據,修改數據,或如更新數據名字。

+3

[在Firebase中使用push()時可能有重複()如何拉取唯一ID](http://stackoverflow.com/questions/16637035/in-firebase-採用快插如何時,-DO-I-拉的唯一-ID) – cartant

回答

2

嘗試這種方式

var fb_ref= firebase.database().ref('players/' + name) 
fb_ref.push({ 
       name: name 
}) 
fb_ref.on('child_added', function (data) { 
       console.log(data.key); 
      }); 

fb_ref.push({ 
       name: name 
}).then(function(fb_ref){ 
    console.log(fb_ref.key); 
}) 

保持一件事記住,如果你使用上面3.X版本火力運用手段的「鑰匙」,如果你的版本較低超過3 .x表示使用像這樣的「key()」