2015-01-11 6 views
-1

Я работаю над приложениями реального времени, и я использую firebase с чистым html и javascript (а не angularJS).Firebase on (child_added) some field 'undefined'

У меня возникли проблемы, когда я сохраненные данные пользователя, чтобы firebase с данным кодом по firebase:

var isNewUser = true; 
ref.onAuth(function(authData) { 
    if (authData && isNewUser) { 
    authData['status'] = 'active'; 
    authData['role'] = 'member'; 
    ref.child("users").child(authData.uid).set(authData); 
    } 
}); 

Это добавит authData к /users/ узла. Как вы можете видеть, я также добавил некоторые настраиваемые поля в authData, статус и роль.

Теперь я использую этот код, чтобы получить данные пользователя от firebase и отобразить их.

ref4.on("value", function(snapshot) { 
    var snapshotData = snapshot.val(); 
console.log('username: '+snapshotData.status); 
}); 

Если я использую on('value') статус получить распечатываются на консоли, но если я сделать это таким образом,

ref4.on("child_added", function(snapshot) { 
    var snapshotData = snapshot.val(); 
    console.log('status: '+snapshotData.status); 
}); 

Это показывает неопределенными для статуса. Могу ли я узнать, что случилось, и как решить эту проблему. Спасибо.

+1

У вас есть 'ref4.on (" chile_added "' в этом последнем фрагмент, который, вероятно, должен быть «child_added». Можно ли считать, что это опечатка только в вопросе, а не в вашем реальном коде? –

+0

Да, извините. Это опечатка. – Chivaa

+1

Можете ли вы воспроизвести это в JSBin/JSFiddle? Было бы полезно посмотреть, как вы создаете переменную 'ref4' и в каком месте она указывает. –

ответ

1

С value возвращает путь, предоставленный ref4, и child_added возвращает каждого ребенка этого пути, маловероятно, что оба будут иметь статус ключа.

Рассмотрим эту структуру данных:

{ 
    "users": { 
     "brucelee": { 
      "status": "awesome" 
     }, 
     "chucknorris": { 
      "status": "awesomerest" 
     } 
    } 
} 

Если я теперь запрос для этого в соответствии с вашим неполном например:

var ref = new Firebase('https://<instance>firebaseio.com/users/brucelee'); 
ref.on('value', function(snap) { 
    // requests the brucelee record 
    console.log(snap.name(), ':', snap.val().status); // "brucelee: awesome" 
}); 

ref.on('child_added', function(snap) { 
    // iterates children of the brucelee path (i.e. status) 
    console.log(snap.name(), ':', snap.val().status); // THROWS AN ERROR, because status is a string 
}); 

Так, чтобы сделать это на child_added со структурой данных, как это (и, предположительно, несколько как ваш), это выглядело бы следующим образом:

ref.on('child_added', function(snap) { 
    // iterates children of the brucelee path (i.e. status) 
    console.log(snap.name(), ':', snap.val()); // "status: awesome" 
}); 
Смежные вопросы