在我的网络应用中,有两种用户:教师和学生
The Teachers:
- can create classrooms with unique classroom ID
- can view his/her students in each classroom he/she createdThe Students
- can join a classroom/s created by a Teacher using classroom IDs
- can view classmates from each he/she joined
对于老师,我使用这些代码来创建教室:
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!");
}
});
}}
我认为以下代码不正确:
Object.keys(clazzID).forEach(function(key)
{
if(clazzID[key] == addclassID) {
var myClass{};
myClass.Studentname= user.displayName;
checkclassID.child("MyStudents").set(myClass);
}
我错过了什么?学生加入特定类(class)的替代方式/代码应该是什么?
类图
所以,Classes下面是user.uid,user.uid下面是push()发送的一个随机id,下面是一个类(class)的信息,比如ClassID,Teacher 、TeacherID 和 TheClass,这是类(class)名称。如果一个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"
}
}
}
}
}
}
}
Result of Mr. Frank's Code
{
"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"
}
}
}
}
}
}
最佳答案
为此,您必须知道两个 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 });
}
更新
如评论所述:由于您的类已经拥有自己的唯一 ID,因此我强烈建议您在存储它们时使用它作为键。这就是上面的代码所做的。
在您当前的结构中,您首先必须查询以找到类的键,然后将它写在那里。您的代码是通过加载所有类然后循环来实现的,但是如果您查询会更容易:
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 });
});
}
关于javascript - 将学生添加到虚拟教室,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52479252/