0

我正在尝试在 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();
4

1 回答 1

0

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

/users/PUSH_ID/PUSH_ID

然后在听:

/用户/PUSH_ID

因此,每个客户端都将只收听自己的数据,而永远不会看到其他任何人的数据。为了查看其他人的数据,您需要都在听/写到相同的路径。

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

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

于 2013-03-27T01:30:35.097 回答