Доступ к объектам данных Firebase - PullRequest
0 голосов
/ 09 мая 2018

, поэтому я пытаюсь составить динамический список кнопок, соответствующих видам спорта, которые пользователь может выбрать для добавления в свой профиль. Итак, у меня есть массив видов спорта, а затем я проверяю, есть ли они в базе данных пользователя, и если да, я их удаляю. Но моя проблема в том, что я заканчиваю со всеми видами спорта, так как консоль печатает, что все они не определены. Я почти уверен, что моя проблема в том, что каждый вид спорта в массиве является строкой, и обычно, когда вы получаете доступ к части объекта из базы данных, вы просто добавляете. и категория, которую вы хотите. Значение обычно не является строкой, т. Е. (UserData.Spikeball в отличие от того, что он делает сейчас userData. "Spikeball"). Но я не знаю, как еще хранить значения в массиве, чтобы заставить их работать. Я попытался удалить цитаты (это глупо, я знаю, но вы должны попробовать все), и это определенно не сработало, поскольку они были тогда переменными, а не инициализированы. Любая помощь с этим будет принята с благодарностью.

function getNewSports(uid)
{
    console.log("uid = " + uid);
    var sports = ["Spikeball", "Soccer", "Basketball", "Indoor", "Tennis", "Golf", "Frisbee", "Handball"];
    userRef = firebase.database().ref().child("Users").child(uid).child("Sports");
    userRef.once('value').then(function(snapshot) {
        var userData = snapshot.val();
        for(var i = 0; i < sports.length; i++)
        {
            var sport = sports[i];
            console.log("userData." + sport + " = " + userData.sport);
            if(userData.sport != null)
            {
                console.log("removing " + sport + " because userData." + sport + " = " + userData.sport);
                sports.splice(i, (i+1));
                i--;
            }

        }
        for(var i = 0; i < sports.length; i++)
        {
            var newItem = document.createElement("BUTTON");
            var t = document.createTextNode(sports[i]);
            newItem.appendChild(t);
            newItem.id = sports[i];
            //newItem.class = "btn btn-secondary sportItem";
            newItem.setAttribute("class", "btn btn-secondary sportItem");
            newItem.setAttribute("onclick", "addSport(this.id)");
            document.getElementById("sports-pop-up").appendChild(newItem);
        }
        console.log(sports);
    });

}

1 Ответ

0 голосов
/ 09 мая 2018

Несколько вопросов, мягко говоря, здесь:

userRef.once('value').then(function(snapshot) {
    const userData = snapshot.val();
    console.log(userData); // -- check the list of sports returned from Firebase.

Вы можете использовать forEach на снимке, чтобы просмотреть результат:

snapshot.forEach(snap => {
    const obj = snap.val();
    console.log(obj)
}

Вы используете один и тот же цикл for дважды, и, таким образом, вы можете объединить логику в один в:

for(var i = 0; i < sports.length; i++) {
    ... Your logic 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...