0

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();
4

1 に答える 1

0

各ユーザーが以下に書き込みを行っているため、作成したコードは正しく機能しません。

/users/PUSH_ID/PUSH_ID

そして、次の場所でリッスンしています。

/users/PUSH_ID

したがって、すべてのクライアントは自身のデータのみをリッスンし、他のユーザーのデータを見ることはありません。他の人のデータを表示するには、すべて同じパスをリッスン/書き込みする必要があります。

あなたの質問では、/users でリッスンするように変更すると、「未定義」が表示されると述べています。コードを簡素化し、そのアプローチを使用していただけないでしょうか?

または、私が正しく理解していない場合は、質問を単純化して明確にしてください。

于 2013-03-27T01:30:35.097 に答える