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