|
|
|
@ -15,9 +15,13 @@ Page({
|
|
|
|
|
student.isasking :0:没有提问,1:提问,2:请回答
|
|
|
|
|
*/
|
|
|
|
|
presence: null,
|
|
|
|
|
origin_presences: [],
|
|
|
|
|
students: [],
|
|
|
|
|
class: null,
|
|
|
|
|
presences : [],
|
|
|
|
|
class_id: null,
|
|
|
|
|
asking_presence: null,
|
|
|
|
|
my_presence: null,
|
|
|
|
|
data: {
|
|
|
|
|
//以下数据的同步由该代码文件实现,数据的呈现由classroom.wxml实现
|
|
|
|
|
students: [], // 该课程所有的学生, 元素类型见上文中的student
|
|
|
|
@ -38,88 +42,95 @@ Page({
|
|
|
|
|
sco3: function () {
|
|
|
|
|
//打3分的函数
|
|
|
|
|
},
|
|
|
|
|
ask: function () {
|
|
|
|
|
ask: function (event) {
|
|
|
|
|
//学生提问的函数
|
|
|
|
|
console.log(event);
|
|
|
|
|
set_asking()
|
|
|
|
|
},
|
|
|
|
|
rep: function () {
|
|
|
|
|
rep: function (event) {
|
|
|
|
|
console.log(event);
|
|
|
|
|
//点这个学生要回答他问题的函数
|
|
|
|
|
},
|
|
|
|
|
set_asking: function(userid, status){
|
|
|
|
|
this.asking_present = this.presents.filter(present=>present.get("user").id==userid)[0];
|
|
|
|
|
this.asking_present.isasking = status;
|
|
|
|
|
this.asking_present.save();
|
|
|
|
|
},
|
|
|
|
|
add_mark: function(mark){
|
|
|
|
|
if(this.asking_present==null){
|
|
|
|
|
console.warn("没有选择学生");
|
|
|
|
|
}else{
|
|
|
|
|
user = this.asking_present.get("user");
|
|
|
|
|
studentClassMap = this.studentClassMaps.filter(studentClassMap=>studentClassMap.get("user"))
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
pull_present: function(){
|
|
|
|
|
pull_presence: function(){
|
|
|
|
|
var query = new AV.Query("Presence");
|
|
|
|
|
//console.log(this.class);
|
|
|
|
|
query.equalTo("class", this.class);
|
|
|
|
|
query.include("user");
|
|
|
|
|
set_present = this.set_present.bind(this);
|
|
|
|
|
return AV.Promise.all([query.find().then(set_present), query.subscribe()]).then(([presents, subscription])=>{
|
|
|
|
|
set_presence = this.set_presence.bind(this);
|
|
|
|
|
return AV.Promise.all([query.find().then(set_presence), query.subscribe()]).then(([presents, subscription])=>{
|
|
|
|
|
this.PresentSubscription = subscription;
|
|
|
|
|
if(this.presentUnbind) this.presentUnbind();
|
|
|
|
|
this.presentUnbind = bind(subscription, presents, set_present);
|
|
|
|
|
this.presentUnbind = bind(subscription, presents, set_presence);
|
|
|
|
|
}).catch(error=> console.error(error.message));
|
|
|
|
|
},
|
|
|
|
|
set_present: function(presents){
|
|
|
|
|
//console.log("set_present");
|
|
|
|
|
//console.log(presents);
|
|
|
|
|
var is_asking={};
|
|
|
|
|
var present_stu_ids = presents.map((present)=>{
|
|
|
|
|
user = present.get("user");
|
|
|
|
|
is_asking[user.id]=present.get("isasking");
|
|
|
|
|
return user.id;
|
|
|
|
|
});
|
|
|
|
|
students = this.students.map((student)=>{
|
|
|
|
|
if(present_stu_ids.indexOf(student.id)>-1){
|
|
|
|
|
student.set("ispresent",true);
|
|
|
|
|
student.set("isasking", is_asking[student.id]);
|
|
|
|
|
set_presence: function(presences){
|
|
|
|
|
console.log("set_presence");
|
|
|
|
|
console.log(presences);
|
|
|
|
|
this.presences = presences;
|
|
|
|
|
students = this.presences.map((presence)=>{
|
|
|
|
|
student = presence.get("user");
|
|
|
|
|
if(student.get("username")==null){
|
|
|
|
|
students = this.students.filter(stu=>stu.id==student.id)
|
|
|
|
|
if(students.length==1){
|
|
|
|
|
student = students[0];
|
|
|
|
|
}else{
|
|
|
|
|
student.set("ispresent",false);
|
|
|
|
|
student.set("isasking", 0);
|
|
|
|
|
student.fetch();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
student.set("ispresent", presence.get("present"));
|
|
|
|
|
student.set("isasking",presence.get("isasking"));
|
|
|
|
|
student.set("mark", presence.get("mark"))
|
|
|
|
|
if(student.id==AV.User.current().id){
|
|
|
|
|
this.my_presence = presence;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return student;
|
|
|
|
|
})
|
|
|
|
|
});
|
|
|
|
|
this.students = students;
|
|
|
|
|
console.log(students);
|
|
|
|
|
this.setData(jsonify({students}));
|
|
|
|
|
return presents;
|
|
|
|
|
return presences;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
fetch_class: function(class_id){
|
|
|
|
|
this.class = AV.Object.createWithoutData("Class_", class_id);
|
|
|
|
|
//this.class.include("teacher");
|
|
|
|
|
return this.class.fetch().then((class_) => {
|
|
|
|
|
//console.log(this.class);
|
|
|
|
|
teacher = this.class.get("teacher");
|
|
|
|
|
console.log("fetch_class");
|
|
|
|
|
//console.log(teacher);
|
|
|
|
|
if(typeof teacher.toJson == "function"){
|
|
|
|
|
teacher = teacher.toJson()
|
|
|
|
|
}
|
|
|
|
|
this.setData({
|
|
|
|
|
class_name: this.class.get("name"),
|
|
|
|
|
class_id: this.class.get("objectId")
|
|
|
|
|
class_id: this.class.get("objectId"),
|
|
|
|
|
teacher: teacher
|
|
|
|
|
});
|
|
|
|
|
}).catch(error=>console.error(error.message))
|
|
|
|
|
},
|
|
|
|
|
fetch_students: function(){
|
|
|
|
|
//console.log("fetch_students");
|
|
|
|
|
var query = new AV.Query("StudentClassMap");
|
|
|
|
|
query.equalTo("class", this.class);
|
|
|
|
|
query.include("user");
|
|
|
|
|
//console.log("fetch_students2")
|
|
|
|
|
return query.find();
|
|
|
|
|
},
|
|
|
|
|
set_students: function(studentClassMaps){
|
|
|
|
|
//console.log("set_students");
|
|
|
|
|
var students = []
|
|
|
|
|
studentClassMaps.forEach((scm, idx, a)=>{
|
|
|
|
|
console.log(a);
|
|
|
|
|
students.push(scm.get("user"));
|
|
|
|
|
});
|
|
|
|
|
this.students = students;
|
|
|
|
|
console.log("this.students");
|
|
|
|
|
console.log(students);
|
|
|
|
|
this.setData(jsonify((students)));
|
|
|
|
|
return students;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生命周期函数--监听页面加载
|
|
|
|
|
*/
|
|
|
|
|
onLoad: function (options) {
|
|
|
|
|
this.setData({current_user: AV.User.current()});
|
|
|
|
|
this.class_id = options.class_id;
|
|
|
|
|
//this.class = AV.Object.createWithoutData("Class_", this.class_id);
|
|
|
|
|
this.fetch_class.bind(this)(this.class_id).then(this.fetch_students).then(this.set_students.bind(this)).then(this.pull_present.bind(this));
|
|
|
|
|
this.fetch_class.bind(this)(this.class_id).then(this.pull_presence.bind(this)).then((presences)=>{this.origin_presences=presences, this.my_presence.enter()});
|
|
|
|
|
console.log("onLoad");
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
@ -137,14 +148,16 @@ Page({
|
|
|
|
|
console.log("onShow");
|
|
|
|
|
console.log("enter class when onShow");
|
|
|
|
|
console.log(AV.User.current());
|
|
|
|
|
this.class.enter();
|
|
|
|
|
if(this.my_presence){
|
|
|
|
|
this.my_presence.enter();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生命周期函数--监听页面隐藏
|
|
|
|
|
*/
|
|
|
|
|
onHide: function () {
|
|
|
|
|
this.class.leave();
|
|
|
|
|
this.my_presence.leave();
|
|
|
|
|
console.log("onHide");
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
@ -152,7 +165,7 @@ Page({
|
|
|
|
|
* 生命周期函数--监听页面卸载
|
|
|
|
|
*/
|
|
|
|
|
onUnload: function () {
|
|
|
|
|
this.class.leave();
|
|
|
|
|
this.my_presence.leave();
|
|
|
|
|
console.log("onUnload");
|
|
|
|
|
this.PresentSubscription.unsubscribe();
|
|
|
|
|
this.presentUnbind();
|
|
|
|
@ -162,7 +175,7 @@ Page({
|
|
|
|
|
* 页面相关事件处理函数--监听用户下拉动作
|
|
|
|
|
*/
|
|
|
|
|
onPullDownRefresh: function () {
|
|
|
|
|
this.pull_present.bind(this)();
|
|
|
|
|
this.pull_presence.bind(this)();
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|