Как я могу заставить своего ученика просматривать все классы, к которым он / она принадлежит? - PullRequest
0 голосов
/ 27 сентября 2018

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

A Учитель может создавать виртуальные классы и просматривать учеников , которые присоединились к его / ее комнатам.

Хотя Ученик может присоединиться к классной комнате и должен видеть класс, к которому он / она присоединился.

Эти коды позволяют Преподавателю создать классную комнату:

function classcreation(q)
    {
        var checkcn = document.getElementById('classroomName').value;
        if(checkcn == "" && checkcn == null){
            alert("Empty Class Name!!");
            }
            else {
              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);
                }
      }

, и они позволяют учителю просматривать созданные им классы.как учеников , которые присоединились к его / ее комнате / комнатам.

var userRef = firebase.database().ref().child('Classes' + '/' + user.uid);
      userRef.on('child_added', function(data)
      {
            var roomNames = data.val().TheClass;
            var Studentx = data.val().MyStudents;

            var studentRawList = '';
            for (var key in Studentx) {
                studentRawList += ('['+Studentx[key].Studentname + ']');
            }

            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><span onclick="clickDone(this)">Students : 
                             </span><ul style="display:none">
                             <li>'+studentRawList+'</li></ul></li></ul>';
              });
            });

JSON:

{
  "Accounts" : {
    "FykyhzEZjndylFj3BbCnPqoTGDo1" : {
      "displayName" : "Dodong Advices",
      "email" : "advicenidodong@gmail.com",
      "status" : "Teacher"
    },
    "HOgdSlTed9V8g0kSZjizgODMDOe2" : {
      "displayName" : "Sweet Macaroni",
      "email" : "Sweet@gmail.com",
      "status" : "Student"
    },
    "yJif4ReTxCcGmo682xWSG3L5MKE3" : {
      "displayName" : "Purple Salad",
      "email" : "Purple@gmail.com",
      "status" : "Student"
    }
  },
  "Classes" : {
    "FykyhzEZjndylFj3BbCnPqoTGDo1" : {
      "-LMpvlBl3mEazhxaJwqb" : {
        "ClassID" : "6503-3503-6827",
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "StackMates"
      },
      "-LMrfIBg8v-hj1k8X2Qf" : {
        "ClassID" : "7583-2402-2757",
        "MyStudents" : {
          "HOgdSlTed9V8g0kSZjizgODMDOe2" : {
            "Studentname" : "Sweet Macaroni"
          }
        },
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "asdasd"
      },
      "-LMrfMV1aw3YNA0PfooR" : {
        "ClassID" : "8083-2712-3347",
        "MyStudents" : {
          "HOgdSlTed9V8g0kSZjizgODMDOe2" : {
            "Studentname" : "Sweet Macaroni"
          },
          "yJif4ReTxCcGmo682xWSG3L5MKE3" : {
            "Studentname" : "Purple Salad"
          }
        },
        "Teacher" : "Dodong Advices",
        "TeacherID" : "FykyhzEZjndylFj3BbCnPqoTGDo1",
        "TheClass" : "Trial"
      }
    }
  }
 }

Итак, на основе JSON, у нас есть 2 ученика пользователь по имени: сладкие макароны и фиолетовый салат. Сладкие макароны присоединились к классу asdasd и Trial , в то время как Purple Salad присоединились только к классной комнате Trial

Вопрос в том, как разрешить каждому пользователю ученику видеть / просматривать комнаты, к которым он принадлежит?

Также пробовал эти коды, но не работал:

  var studentRef = firebase.database().ref().child('Classes' + '/' + 
                                                   user.uid);
              studentRef.on('child_added', function(data)
              {
                    var roomNamess = data.val().TheClass;
                    var Studentxx = data.val().MyStudents;

                    var studentRawLists = '';
                    for (var keys in Studentxx) {
                      if(studentxx[keys].Studentname  == user.displayName){
                        studentRawLists += 
                                    ('['+Studentxx[keys].Studentname + ']');

                    }
                  }
                    var classDD = data.val().ClassID;
                    var ull = document.createElement('ul');
                    document.getElementById('myLista').appendChild(ull);
                    var lii = document.createElement('li');
                    ull.appendChild(lii);

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

1 Ответ

0 голосов
/ 27 сентября 2018
{
    "Classes": {
        "FykyhzEZjndylFj3BbCnPqoTGDo1": {

                "students": [
                    "-LMpvlBl3mEazhxaJwqb",
                    "-LMrfIBg8v-hj1k8X2Qf",
                    "-LMrfMV1aw3YNA0PfooR"
                ],

                "staff": [
                    "-LMpvlBsadsadsdadsad"
                ],

                "details": {
                    "title": "Leaning English",
                    "room_number": "L32",
                    "time_start": "14:00",
                    "time_end": "17:00"
                }

        }
    }
}

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

В NoSQL вы не должны бояться записывать данные более одного раза в разные места, чтобы сэкономить на дополнительных запросах.

Обновлено объяснение Json.

Позвольте мне описать json для вас.

for(i in this.data){

  var uid = user.uid;

  var student = this.data[i].val.students;

  for(i2 in student){

    if(student[i2] == uid){

      //student assigned to room
      console.log(this.data[i].val.details);

    }

  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...