答题积分小程序云开发实战-界面交互篇:答题页的答题逻辑交互开发
发布于 2 年前 作者 rhan 1221 次浏览 来自 分享

微信小程序云开发实战-答题积分赛小程序

界面交互篇:答题页的答题逻辑交互开发

前面的那一篇文章,我们已经完成了使用云开发的聚合能力实现从题库中随机抽取题目功能。

在页面加载时,实现从题库中随机抽取题目功能。那么,拿到数据后要干什么?如何做?

动态数据绑定

实现动态数据绑定,其实,概括起来就三步走:

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 => {
      
    })
  },

本篇小结

至此,已经实现了完整的答题交互逻辑以及功能,也就是整个答题页面的答题环节已经具备前后端以及数据库能力。云开发能力,真的极大地提升了开发效率。据我搭建过的网络安全知识答题、交通安全答题、 消防安全知识宣传、 安全生产知识学习、学法普法、五四青年节等答题活动或有奖竞答等应用,进行整理总结并分享,希望对大家有帮助。

回到顶部