2013-03-26 84 views
0

我正在嘗試將Firebase中的已關聯用戶列表只填入選擇下拉列表。我的問題是,我似乎無法正確訪問子對象。無法訪問Firebase中的子對象

使用connectedUsers.userName(見下面的代碼)的作品,但只爲我自己的用戶數據,它不拉別的東西。

在我看來,將「myUserRef.on」更改爲「userListRef.on」並使用諸如「snapshot.child('userName').val()」之類的東西應該可以工作,但它只是拋出未定義。 「connectedUsers.child.userName」也是一樣,我敢肯定我在這裏錯過了一些簡單的東西。

在下面的代碼中,通過更改爲「userListRef.on('child_added',function(snapshot)」我可以成功地從Firebase中添加和刪除用戶數據,並將所有對象記錄到控制檯,當我深入的對象。我只是需要一種方法來訪問這些數據,所以我可以把所有的用戶連接到一個選擇下拉或從中刪除時斷開連接。

var userListRef = new Firebase('https://myaccount.firebaseIO.com/users/'); 
var myUserRef = userListRef.push(); 

// ADD USER DATA TO FIREBASE 
var userId = $('#myIdInput').val(); 
var userName = $('#nameInput').val(); 
myUserRef.push({userId: userId, userName: userName}); 

// READ USER OBJECTS AND FIRE ADDUSER FUNCTION 
myUserRef.on('child_added', function(snapshot) { 
var connectedUsers = snapshot.val(); 
console.log(addUser); 
//addUser(connectedUsers.userId, connectedUsers.userName); 
}); 

// ADD USER TO SELECT DROPDOWN 
function addUser(userId, userName) { 
var modSelect = $('#tsmmodsendto'); 
modSelect.append($('<option></option>').attr("value", userId).text(userName)); 
} 

// READ USER OBJECTS AND FIRE REMOVEUSER FUNCTION 
myUserRef.on('child_removed', function(snapshot) { 
var connectedUsers = snapshot.val(); 
console.log(removeUser); 
//removeUser(connectedUsers.userId, connectedUsers.userName); 
}); 

// REMOVE USER TO SELECT DROPDOWN 
function removeUser(userId, userName) { 
var modSelect = $('#tsmmodsendto'); 
modSelect.append($('<option></option>').removeAttr("value", userId).text(userName)); 
} 

// ON DISCONNECT REMOVE USER DATA FROM FIREBASE 
myUserRef.onDisconnect().remove(); 

回答

0

你寫韓元的代碼因爲每個用戶正在寫入:

/users/PUSH_ID/PUSH_ID

,然後在聽:

/用戶/ PUSH_ID

所以每個客戶端將被監聽只有它自己的數據,絕不會看到其他人的數據。爲了查看其他人的數據,您需要全部聽取/寫入相同的路徑。

在你提到的問題中,如果你更改爲在/ users處進行監聽,你會看到「undefined」。你可以簡化你的代碼,並使用這種方法,也許我可以提供更有幫助的答案嗎?

或者如果我沒有正確理解,請簡化並澄清您的問題。

+0

感謝您的回覆,我確實不會將每個用戶推送到它自己的ID,但是我遇到的問題是,一旦有人離開,它將刪除所有在斷開連接的人員的所有數據,而不是僅刪除他們自己的數據。我認爲通過這樣做我可以以某種方式通過使用「userListRef.on」而不是使用「myUserRef.on」來收集子數據,因爲這將聽取父母而不是孩子。對我來說,看起來很奇怪的是,以這種方式收聽父母時仍然缺乏收集孩子數據的能力。 – 2013-03-27 02:12:13

+0

我在這裏有點困惑。如果對參考僅對用戶自己的數據執行onDisconnect()。remove()操作,它將不會刪除所有用戶的所有數據。 – 2013-03-27 06:26:05

+0

也許我錯過了一些東西,而沒有使用userListRef.onDisconnect()去推送myUserRef。刪除所有數據,是否有我需要傳遞的參數,使其只能刪除我缺少的用戶數據? – 2013-03-27 16:33:51