這幾天着手做一個商城小程序的答題系統,主要功能就是在線答題,提交答案,根據評分判定獎勵,然后到
商城兌換獎券,我呢,負責寫后台的接口,先來大概看一下吧:
可以看到,我這個提交答卷以供評分的接口,前台提供了答案,並且每題的答案要帶上這題的id,當時也是出於接口
處理起來方便的目的,for循環的時候,直接根據id查詢該題的答案並加以比較,算出得分。
然后小程序前端接口對接的時候,處理起來並沒有想象中那樣簡單,畢竟小程序很多地方還沒有摸透。但最終還是巧
妙地解決了問題。
<view class="s_answer pf_m border {{checked == index+1?'active':''}}"
data-index="{{index+1}}"
data-exam="{{nowSubject.id}}"
data-check="{{index==0?'A':index==1?'B':index==2?'C':index==3?'D':''}}"
wx:for="{{nowSubject.answers}}" wx:key="index"
catchtap='answerCheck'> {{index == 0?'A:':''}} {{index == 1?'B:':''}} {{index == 2?'C:':''}} {{index == 3?'D:':''}} {{item}} </view>
紅字是我為了將該題id和答案存入頁面變量所寫的,這個data-check當時也是抱着試試看的態度,沒想到三元運算符
當真可以有如此酷炫的玩法。(其實下面的選項內容前面的選項判斷也可以這么寫)
然后我們來看看這個catchtap方法,其實就相當於我們常見的單擊事件:
answerCheck:function(e){ var that = this; var nowSubject = that.data.nowSubject; var index = e.target.dataset.index; var exam = e.target.dataset.exam; var check = e.target.dataset.check; var answerBox = that.data.answerBox; var sub = {}; sub.id = exam; sub.answer = check; answerBox.push(sub); nowSubject.check = check; that.setData({ checked:index, nowSubject: nowSubject, answerBox: answerBox, tNumber: 0 }) },
不用說,紅字又是我寫的,這里通過e.target.dataset.xxx獲取前台頁面綁定的data-exam和data-check,並且將其放
到一個對象變量sub中,再將這個對象push到數組answerBox中,最終20題,只要選項點擊了的話,那么該題的id和
選項都將作為對象存到頁面變量中。最后在題目答完之后將answerBox作為參數傳給提交答卷接口,大功告成!!!