代码之家  ›  专栏  ›  技术社区  ›  Dodong Advices

如何让我的用户学生检索和显示他/她所属的教室?[副本]

  •  0
  • Dodong Advices  · 技术社区  · 7 年前

    在我的web应用程序中,有两种类型的用户: 教师 学生

    一个 教师 可以创建虚拟教室并查看 学生 加入他/她的房间。

    学生 可以加入教室,并且应该能够看到他/她加入的教室。

    这些代码允许 教师 创建教室:

    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个 学生 用户名称:甜通心粉紫色拉。 甜通心粉 加入一个班 阿斯达 审判 虽然 紫色沙拉 只是加入了教室 审判

    问题是,如何允许每个用户 学生 去看看他们所住的房间?

    也尝试过这些代码,但没有成功:

      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>';
                          });
                        });
    
    0 回复  |  直到 7 年前
        1
  •  0
  •   PHILL BOOTH    7 年前
    {
        "Classes": {
            "FykyhzEZjndylFj3BbCnPqoTGDo1": {
    
                    "students": [
                        "-LMpvlBl3mEazhxaJwqb",
                        "-LMrfIBg8v-hj1k8X2Qf",
                        "-LMrfMV1aw3YNA0PfooR"
                    ],
    
                    "staff": [
                        "-LMpvlBsadsadsdadsad"
                    ],
    
                    "details": {
                        "title": "Leaning English",
                        "room_number": "L32",
                        "time_start": "14:00",
                        "time_end": "17:00"
                    }
    
            }
        }
    }
    

    这将取决于你如何查询数据,但我猜用户,是学生还是教师将要看到他们分配的房间,所以你应该扫描每个类的用户uid。

    在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);
    
        }
    
      }
    
    }