2015-03-04 2 views
0

Я пишу веб-приложение Javascript, используя Firebase. Если у меня есть данные, как это в моем JSON дерево:Получить определенное значение из дерева JSON Firebase на основе значения

users 
    session1 
      screenname:Bill 
    session2 
      screenname:Steve 

... и я знаю, номер сессии, как я могу захватить «имя» пользователя? Я пробовал:

valUsers.child('session1').child('screenname').once('value', function(data){ 
    console.log(data); 
}); 

Но это не работает. Я предполагаю, что у меня проблема с синтаксисом?

+1

Является ли valUsers ссылкой на ваш объект Firebase? Также вы посмотрели на .val()? https://www.firebase.com/docs/web/api/datasnapshot/val.html – getglad

+0

Да, именно так. Мне нужны data.val() вместо просто данных. Благодаря! –

ответ

3

Вы были довольно близки, но вам необходимо было использовать DataSnapshot.val(), как показано ниже, для доступа к нужной точке.

var ref = new Firebase('yourfirebaselocation/users'); 
var sessionNum = 'session1'; 
ref.child(sessionNum + '/screenname').once('value', function(dataSnapshot) { 
    var specificScreenname = specificPoint.val(); 
} 

При работе с Firebase, вы можете также изучить работы с Promise objects. Это позволит вам создать некоторые повторяющиеся функции, которые могут повторно использовать вашу ссылку в нескольких местах, а также дать Firebase время для ответа на ваш запрос.

var ref = new Firebase('yourfirebaselocation/users'); 

function getUser(theRef, location) { 
    return new Promise(
    function(resolve, reject) { 
     theRef.child(location).once('value', function(dataSnapshot) { 
     resolve(dataSnapshot); 
     }); 
    }); 
} 

getUser(ref, specificlocationvariable).then(function(val) { 
    specificScreenname = val.val(); 
}); 

Вы не указали, кроме «JavaScript», так что имейте в виду, что посылы являются ECMAScript 6 предложений с некоторыми проблемами совместимости, но много рамок JS есть реализация для него, что сглаживает этот вопрос (Угловая, Эмбер и т. Д.).

Смежные вопросы