Firebase で接続されているユーザーのリストを取得して、単に選択ドロップダウンに入力しようとしています。私の問題は、子オブジェクトに適切にアクセスできないように見えることです。
connectedUsers.userName (以下のコードを参照) を使用すると機能しますが、自分のユーザー データに対してのみ機能し、他には何も取得しません。
「myUserRef.on」を「userListRef.on」に変更し、「snapshot.child('userName').val()」のようなものを使用するように思えましたが、未定義をスローするだけです。同じことが「connectedUsers.child.userName」にも当てはまります。ここには単純なものが欠けていると確信しています。
以下のコードを "userListRef.on('child_added', function(snapshot)"そのデータにアクセスする方法が必要なだけで、接続しているすべてのユーザーを選択ドロップダウンに入れたり、切断したときにドロップダウンから削除したりできます。
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();