无法访问Firebase中的子对象

时间:2013-03-26 23:23:14

标签: list object firebase

我正在尝试在Firebase中提取已连接用户的列表,以简单地填充选择下拉列表。我的问题是我似乎无法正确访问子对象。

使用connectedUsers.userName(参见下面的代码)但仅适用于我自己的用户数据,它不会提取任何其他内容。

在我看来,将“myUserRef.on”更改为“userListRef.on”并使用类似“snapshot.child('userName')。”val()“应该可以工作,但它只是抛出undefined。 “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();

1 个答案:

答案 0 :(得分:0)

您编写的代码无法正常工作,因为每个用户都在写:

/用户/ PUSH_ID / PUSH_ID

然后正在听:

/用户/ PUSH_ID

因此,每个客户端都只会监听自己的数据,而且永远不会看到其他人的数据。为了查看其他人的数据,您需要全部倾听/写入相同的路径。

在您提出的问题中,如果您改为收听/ users,则会看到“未定义”。你能简化你的代码,并使用这种方法,或许我可以提供更有帮助的答案吗?

如果我没有正确理解,请简化并澄清您的问题。