// pages/classroom/classroom.js const AV = require("../../lib/av-live-query-weapp-min") const { jsonify } = require('../../utils/leancloudutils'); const bind = require("../../lib/live-query-binding") Page({ /** 页面的初始数据 students: 该课程所有的学生 元素student student.objectId 该学生的主键,唯一 student.username 学生的用户名,是唯一,就像微信号一样 student.name 学生的姓名 student.present 是否出席 student.isasking :0:没有提问,1:提问,2:请回答 */ presence: null, students: [], class: null, class_id: null, data: { //以下数据的同步由该代码文件实现,数据的呈现由classroom.wxml实现 students: [], // 该课程所有的学生, 元素类型见上文中的student current_user: null, //目前登陆的用户,类型为对象,属性有objectId,username, name teacher: null, //该课程教员,类型为对象 //请在进入界面时判断用户是否为教员以给与权限或更改界面 //属性如下:objectId, username, name class_name: "", //课程名称 class_id: "", //该课程的主键(编号) }, sco1: function () { //打1分的函数 }, sco2: function () { //打2分的函数 }, sco3: function () { //打3分的函数 }, ask: function () { //学生提问的函数 }, rep: function () { //点这个学生要回答他问题的函数 }, pull_present: 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])=>{ this.PresentSubscription = subscription; if(this.presentUnbind) this.presentUnbind(); this.presentUnbind = bind(subscription, presents, set_present); }).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]); }else{ student.set("ispresent",false); student.set("isasking", 0); } return student; }) this.setData(jsonify({students})); return presents; }, fetch_class: function(class_id){ this.class = AV.Object.createWithoutData("Class_", class_id); return this.class.fetch().then((class_) => { //console.log(this.class); this.setData({ class_name: this.class.get("name"), class_id: this.class.get("objectId") }); }).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.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)); console.log("onLoad"); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { console.log("onReady"); }, /** * 生命周期函数--监听页面显示 */ onShow: function () { console.log("onShow"); console.log("enter class when onShow"); console.log(AV.User.current()); this.class.enter(); }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { this.class.leave(); console.log("onHide"); }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { this.class.leave(); console.log("onUnload"); this.PresentSubscription.unsubscribe(); this.presentUnbind(); }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { this.pull_present.bind(this)(); }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { console.log("onShareAppMessage"); } })