理解与认识
bootstrap的分页分为前端(客户端)分页和后端(服务端)分页两种,参数设置时,客户端(前端)分页的参数:sidePageination:’client’,服务端(后端)分页的参数sidePagenation:’server’。在数据格式上前端分页(客户端)需要的数据结构必须为[{},{},{}…],服务端需要的数据格式为{total:56,rows:[{},{},{}….]}具备以上两个条件,bootstraptable分页就可以正常显示,但是在前端(客户端)分页的时候,后端接口中传过来的数据不一定符合我们的数据格式标准,这就需要我们在ajax(已被框架封装进组件)获取数据完成之后且数据分发之前打印一下数据,查看是否合规。
分析原理
ajax完成获取数据并且还未发放数据,这一过程的数据(原始数据)在responseHander参数里面能够获取到,responseHandler: function(res) {return res}这里的res即为原始数据,打印出来如果res的数据格式符合当前分页(服务器或客户端)的格式则不用做处理,如果不符合则需要进行处理,如下面的例子中,我们做的是前端分页,所需要的格式是[{},{},{}…],而我们打出来的res原始数据格式为
{total:56,rows:[{},{},{}….]},这就需要我们进行局部截取处理,只保留合法部分:
1 | responseHander:function(res){ |
排序,前端排序的基本思想就是通过获取要排序的字段名称和排序方式(asc正序或者desc倒序),对已请求获得的所有数据在发放前进行重新排列,再发放数据使其显示的行为。
具体实践
每次点击列表中的某一字段进行排序,相当于是重新查询了一遍数据,所以排序之前先设置了查询的字段规则和排序规则,这一步在queryParams: function queryParams(params) { } 获取到,params即为每次进行查询时所有的参数数据,这时候我们打印一下params,因为我们的queryParamsType设置的参数为undefined,所以打印出来的数据包含了sortName和sortOrder即排序名称和排序规则。
当我们点击某字段的排序按钮我们会看到sortName和sortOrder也在变成我们对应的字段名称和切换排序顺序,换句话说我们每次对列表进行点击排序操作在queryParams: function queryParams(params) { }都能拿到,现在我们有一个思路就是获取当前的sortName和sortOrder,通过这两项在数据发放前进行数据的重新排列,首先我们看一下我们要处理的数据,res.rows,这个数据格式是[{},{},{}….],这样我们要对数组中的对象通过对象中的某个属性进行排序,函数如下:
1 | /**根据数组里属性的值的大小进行排序**/ |
我们要在数据发放之前调用compare函数,也就是在 responseHander:function(res){}里面调用,compare函数的两个参数分别为属性名和排序方式,在第一次加载页面时我们可以规定一个默认的排序名称和排序方法把他们保存在两个全局变量当中,如 var sortName = ‘auditStatus’, sortType = ‘asc’;调用compare(sortName,sortType);当点击了排序按钮时再将获取到的params里面的sortName和sortOrder分别赋给sortName和sortType,即:
1 | sortName = params.sortName; |
两个全局变量被赋予了新的值,这样每当我们重新点击了排序按钮,列表数据进入新一轮查找重新调用了compare(sortName,sortType);数据就完成了新一轮的排序。全部实现代码如下:
1 | var sortName = 'auditStatus', sortType = 'asc'; |
