微信小程序云开发实战-答题积分赛小程序
界面交互篇:答题页的答题逻辑交互开发
后面的那一篇文章,咱们曾经实现了应用云开发的聚合能力实现从题库中随机抽取题目性能。在页面加载时,实现从题库中随机抽取题目性能。那么,拿到数据后要干什么?如何做?
动态数据绑定
实现动态数据绑定,其实,概括起来就三步走:
1)先通过 Collection.get 来获取题库汇合里的题目数据;
2)再应用setData函数将题目数据从逻辑层发送到视图层;
3)再Mustache 语法(双大括号)将变量包起来,实现动态数据绑定。
抉择选项答题事件
这里次要用到了radio-group组件,radio-group中选中项产生扭转时触发 change 事件,detail = {value:[选中的radio的value的数组]}。在radio-group应用bindchange绑定监听事件radioChange。
test.js定义监听函数radioChange。
// 选中选项事件 radioChange(e){ this.data.chooseValue[this.data.index] = e.detail.value; },
切换下一题事件
在组件中绑定一个事件处理函数,如bindtap,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。
<button bindtap='okFunc' class="cu-btn lg round bg-sky">确定</button>
在相应的Page定义中写上相应的事件处理函数,参数是event。
okFunc(){ // 如果没有抉择 if (this.data.chooseValue[this.data.index] == undefined || this.data.chooseValue[this.data.index].length == 0) { return wx.showToast({ title: '请抉择答案!', icon: 'none' }) } // 判断所抉择的选项是否为正确答案 this.chooseJudge(); this.setData({ isOk: true }) },
得分断定逻辑
// 判断所抉择的选项是否为正确答案 chooseJudge(){ var trueValue = this.data.questionList[this.data.index]['true']; var chooseVal = this.data.chooseValue[this.data.index]; if (chooseVal.toString() != trueValue.toString()) { // 答错则记录错题 this.data.wrong++; this.data.wrongListSort.push(this.data.index); this.data.wrongList.push(this.data.questionList[this.data.index]._id); }else{ // 答对则累计总分 this.setData({ totalScore: this.data.totalScore + this.data.questionList[this.data.index]['scores'] }) } },
实时更新用户的答题积分
在答题结束后,实时计算问题并更新所取得积分到用户答题总积分,也就是累加。
要害代码解读:
// 实时更新用户的答题积分 updateIntegration(){ // 连贯云数据库 const db = wx.cloud.database(); // 获取汇合的援用 const user = db.collection('user'); // 数据库操作符,通过 db.command 获取 const _ = db.command; user .doc(this.data.id) // 获取汇合中指定记录的援用。办法承受一个 id 参数,指定需援用的记录的 _id。 .update({ // 发动更新申请 data: { score: _.inc(this.data.score) // 更新操作符,原子操作,用于批示字段自增 } }).then(res => { }) },
本篇小结
至此,曾经实现了残缺的答题交互逻辑以及性能,也就是整个答题页面的答题环节曾经具备前后端以及数据库能力。云开发能力,真的极大地晋升了开发效率。据我搭建过的网络安全常识答题、交通安全答题、 消防安全常识宣传、 平安生产常识学习、学法普法、五四青年节等答题流动或有奖竞答等利用,进行整顿总结并分享,心愿对大家有帮忙。