Добавление студентов в виртуальный класс - PullRequest
0 голосов
/ 24 сентября 2018

В моем веб-приложении есть 2 типа пользователей: Учителя и Ученики

Учителя:
- может создавать классные комнаты с уникальным идентификатором класса
- может просматривать своих учеников в каждом созданном им классе

Учащиеся
- могут присоединиться к классной комнатесозданный учителем с использованием идентификаторов классов
- может просматривать одноклассников из каждого, к кому он / она присоединился

Для Учитель Я использовал эти коды для создания классов:

function classcreation(q)
{
    var usuid = generateId();
    var myClasses={};
    myClasses.TheClass = document.getElementById('classroomName').value;
    myClasses.Teacher = user.displayName;
    myClasses.TeacherID = user.uid;
    myClasses.ClassID = usuid;
    fbclass.child(user.uid).push().set(myClasses);
}

И эти коды для просмотра каждого user.teachers создали классные комнаты:

var userRef = firebase.database().ref().child('Classes' + '/' + user.uid);
userRef.on('child_added', function(data)
{
    var roomNames = data.val().TheClass;
    var Studentx = data.val().TheStudents;
    var classD = data.val().ClassID;
    var ul = document.createElement('ul');
    document.getElementById('myList').appendChild(ul);
    var li = document.createElement('li');
    ul.appendChild(li);

    Object.keys(roomNames).forEach(function(key)
    {
        li.innerHTML += '<span 
            onclick="clickDone(this)">'+roomNames[key]+'</span> 
            <ul style="display:none"><li>Class Id : 
            '+classD+'</li><li>Students : '+Studentx+'</li> 
            </ul>';
    });
});

Я попытался использовать эти коды для user.students, чтобы присоединиться к классу

function addclass() {
    var addclassID = document.getElementById("classroomID").value;
    var checkclassID = firebase.database().ref().child('Classes' + '/' + 
    user.uid);

    userRef.on('child_added', function(data)
    {
        var studentx = data.val().TheStudents;
        var clazzID = data.val().ClassID;
        Object.keys(clazzID).forEach(function(key)
        {
            if(clazzID[key] == addclassID) {
                var myClass{};
                myClass.Studentname= user.displayName;
                checkclassID.child("MyStudents").set(myClass);
            } 
            else
            {
                alert("Class doesnt exist!");
            }
        });
    }}

IПоверьте, приведенные ниже коды неверны:

Object.keys(clazzID).forEach(function(key)
{
    if(clazzID[key] == addclassID) {
        var myClass{};
        myClass.Studentname= user.displayName;
        checkclassID.child("MyStudents").set(myClass);
    } 

Что я пропустил?Каким должен быть альтернативный способ / код для учеников присоединиться к определенному классу?

Изображение класса

enter image description here

Итак, под Classes находится user.uid, под пользователем.uid - это случайный идентификатор, отправляемый push (), под ним - информация о классе, такая как ClassID, Teacher, TeacherID и TheClass, который является именем класса.Если user.student успешно присоединился к классной комнате, MyStudents должны появиться на том же уровне информации: => ClassID, Teacher, TeacherID, TheClass, MyStudent.Согласно MyStudents, именно там должны быть размещены данные user.student после того, как он / она присоединился к классной комнате.

Для получения дополнительной информации просто прокомментируйте это ниже.Буду очень признателен за любую помощь.

JSON:

{
  "Accounts" : {
    "FykyhzEZjndylFj3BbCnPqoTGDo1" : {
      "displayName" : "Dodong Advices",
      "email" : "advicenidodong@gmail.com",
      "status" : "Teacher"
    },
  }
  "Classes" : {
    "FykyhzEZjndylFj3BbCnPqoTGDo1" : {
      "-LMpvlBl3mEazhxaJwqb" : {
        "ClassID" : "6503-3503-6827",
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "StackMates"
      },
      "-LMrfIBg8v-hj1k8X2Qf" : {
        "ClassID" : "7583-2402-2757",
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "asdasd"
      },
      "-LMrfMV1aw3YNA0PfooR" : {
        "ClassID" : "8083-2712-3347",
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "HAHAHAHA"
      }
    }
  }
}

JSON, который я пытаюсь выполнить: ps: я добавилновый ученик

{
  "Accounts" : {
    "FykyhzEZjndylFj3BbCnPqoTGDo1" : {
      "displayName" : "Dodong Advices",
      "email" : "advicenidodong@gmail.com",
      "status" : "Teacher"
    },
    "HOgdSlTed9V8g0kSZjizgODMDOe2" : {
      "displayName" : "Sasuke Uchiha",
      "email" : "Sasuke@gmail.com",
      "status" : "Student"
    },
    "yJif4ReTxCcGmo682xWSG3L5MKE3" : {
      "displayName" : "Naruto Uzumaki",
      "email" : "Naruto@gmail.com",
      "status" : "Student"
    },
    "yo9hQLNUtOhSVn9xEhBT7uDI72y1" : {
      "displayName" : "Itachi Uchiha",
      "email" : "Itachi@gmail.com",
      "status" : "Teacher"
    }
  },
  "Classes" : {
    "FykyhzEZjndylFj3BbCnPqoTGDo1" : {
      "-LMpvlBl3mEazhxaJwqb" : {
        "ClassID" : "6503-3503-6827",
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "StackMates"
      },
      "-LMrfIBg8v-hj1k8X2Qf" : {
        "ClassID" : "7583-2402-2757",
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "OverFlowers"
      },
      "-LMrfMV1aw3YNA0PfooR" : {
        "ClassID" : "8083-2712-3347",
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "CodeHard"
      }
    },
    "yo9hQLNUtOhSVn9xEhBT7uDI72y1" : {
      "-LMw39kVqsi5sYbudFSk" : {
        "ClassID" : "3514-2160-0317",
        "Teacher" : "Itachi Uchiha",
        "TeacherID" : "yo9hQLNUtOhSVn9xEhBT7uDI72y1",
        "TheClass" : "Akatsuki",
        "MyStudents" : {
           "HOgdSlTed9V8g0kSZjizgODMDOe2" : {
              "StudentName" : "Sasuke Uchiha"
           }
        }
      },
      "-LMw3A_hP2vkKyaowt8J" : {
        "ClassID" : "7647-8387-3883",
        "Teacher" : "Itachi Uchiha",
        "TeacherID" : "yo9hQLNUtOhSVn9xEhBT7uDI72y1",
        "TheClass" : "Konoha",
        "MyStudents" : {
          "HOgdSlTed9V8g0kSZjizgODMDOe2" : {
              "StudentName" : "Sasuke Uchiha",
          "yJif4ReTxCcGmo682xWSG3L5MKE3" : {
              "StudentName" : "Naruto Uzumaki"
           }
          }
        }
      }
    }
  }
}

Результат кода мистера Фрэнка

{
  "Accounts" : {
    "FykyhzEZjndylFj3BbCnPqoTGDo1" : {
      "displayName" : "Dodong Advices",
      "email" : "advicenidodong@gmail.com",
      "status" : "Teacher"
    },
    "HOgdSlTed9V8g0kSZjizgODMDOe2" : {
      "displayName" : "Sweet Macaroni",
      "email" : "Sweetm@gmail.com",
      "status" : "Student"
    }
  },
  "Classes" : {
    "FykyhzEZjndylFj3BbCnPqoTGDo1" : {
      "-LMpvlBl3mEazhxaJwqb" : {
        "ClassID" : "6503-3503-6827",
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "StackMates"
      },
      "-LMrfIBg8v-hj1k8X2Qf" : {
        "ClassID" : "7583-2402-2757",
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "GoogleHub"
      },
      "7583-2402-2757" : {
        "MyStudents" : {
          "HOgdSlTed9V8g0kSZjizgODMDOe2" : {
            "Studentname" : "Sweet Macaroni"
          }
        }
      }
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы пробовали это -

function addclass() {
    var addclassID = document.getElementById("classroomID").value;
    var teacherUID = ...; // ?
    var studentUID = user.uid;
    var studentName = user.displayName;
    var classRef = firebase.database().ref().child('Classes').child(teacherUID);
    classRef.child(addclassID);
    var studentsRef = classRef.child("MyStudents");
    studentsRef.child(studentUID).set({ Studentname: studentName });
}
0 голосов
/ 24 сентября 2018

Для этого вы должны знать два UID: один для студента и один для учителя.С их помощью код может быть довольно простым:

function addclass() {
    var addclassID = document.getElementById("classroomID").value;
    var teacherUID = ...; // ?
    var studentUID = user.uid;
    var studentName = user.displayName;
    var classRef = firebase.database().ref().child('Classes').child(teacherUID).child(addclassID);
    var studentsRef = classRef.child("MyStudents");
    studentsRef.child(studentUID).set({ Studentname: studentName });
}

Обновление

Как прокомментировано: поскольку у ваших классов уже есть свой уникальный идентификатор, я очень рекомендую использовать этов качестве ключа, когда вы храните их.Вот что делает приведенный выше код.

В вашей текущей структуре вам сначала нужно будет выполнить запрос, чтобы найти ключ класса, а затем написать его там.Ваш код делал это, загружая все классы и затем зацикливаясь, но это проще, если вы сделаете запрос:

function addclass() {
    var addclassID = document.getElementById("classroomID").value;
    var teacherUID = ...; // ?
    var studentUID = user.uid;
    var studentName = user.displayName;
    var classRef = firebase.database().ref().child('Classes').child(teacherUID);
    classRef.orderByChild("ClassID").equalTo(addclassID).once("child_added", function(snapshot) {
      var studentsRef = snapshot.ref.child("MyStudents");
      studentsRef.child(studentUID).set({ Studentname: studentName });
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...