由于语音播放问题没有解决,所以在这里不涉及这方面的分析!
这一小节我们来分析首页这个页面,也就是index页面。
index.js
首先我们引用了两个文件,api.js 和 util.js,这个没什么好说的了。
var util = require('../../utils/util.js')
var Api = require('../../utils/api.js')
然后我们看 Page 中 data 的部分。
-
token用来存储从 本地或者远程获取到的token值
-
list数据用来存储 从服务器获取到的 imaginations
-
pages定义了获取第几页
-
per定义了一页获取几个
-
done记录用户在上拉刷新时,是否已经获取完全部 imaginations 资源.
Page({
data: {
token: '',
list: [],
page: 1,
per: 10,
done: false
}
})
|
onLoad做了三件事,第一件事是获取token,第二件事是设置data中的token,第三件事就是通过调用this.getData 函数向服务器获取 imaginations 资源
onLoad: function() {
var _this = this
util.getInfo(function(info) {
typeof info === 'object' ? '' : info = JSON.parse(info)
_this.setData({token: info.token});
_this.getData();
})
},
|
onPullDownRefresh定义用户下拉刷新时应该做的事,需要注意的是要设置page为1。
onPullDownRefresh: function() {
this.setData({page: 1})
this.getData()
},
|
这里记得要配置下index.json文件。
{
"enablePullDownRefresh":"true"
}
onReachBottom,这里要注意的是,因为存在下面这个bug,所以需要加一个if判断其token是否有值。
bug: iOS/Android 6.3.30, 首次进入页面,如果页面不满一屏时会触发 onReachBottom ,应为只有用户主动上拉才触发;
判断this.data.done,如果还有资源则调用this.lower(),如果已经全部加完成,则出现提示框。
onReachBottom: function() {
if(this.data.token) {
if(!this.data.done) this.lower()
else {
wx.showToast({
title: '没有更多内容',
icon: 'success',
duration: 600
})
}
}
},
|
因为这里涉及到lower函数,我们就来看看,其实也很简单,主要就是需要将其page加1.
lower: function() {
this.setData({page: this.data.page + 1})
this.getData()
},
|
最后,终于到了getData函数,此函数向服务器获取 imaginations 资源。
getData: function() {
var _this = this
var token = _this.data.token
var per = _this.data.per
var page = _this.data.page
//构造请求的url
var apiUrl = Api.imaginations + '?per=' + per + '&page=' + page + '&token=' + token
//展示加载中的toast
wx.showToast({
title: '加载中',
icon: 'loading',
duration: 500
})
//如果page等于1,则需要将list清空
if(page === 1) {
_this.setData({ list: [] });
}
//发送请求
wx.request({
url: apiUrl,
method: 'GET',
success: function(res){
console.log('获取imaginations成功:', res)
//如果data为空,说明资源自己全部加在完毕,则需要设置done状态为true
if(res.data.length === 0) _this.setData({done: true})
else _this.setData({done: false})
//这里资源请求成功,需要调用wx.stopPullDownRefresh()
wx.stopPullDownRefresh()
//设置list同时,需要对数据进行一点点小的改造,时长转换为字符串格式,语音播放地址path
_this.setData({list: _this.data.list.concat(res.data.map(function(item){
item.duration = util.NumberToTime(Math.floor(item.duration/1000))
item.path = 'https://tinyapp.sparklog.com/static/uploads/' + JSON.parse(item.src).filename
return item
}))})
},
fail: function() {
console.error('获取imaginations失败')
}
})
},
|
这就是index.js的全部内容。
|