分页的重要性
在分页这个话题之前,我们不得不提一下网络应用的性能问题。在网络应用中,提高性能的一个常用方式就是“懒加载”,即按需加载。如果我们能将数据分成多页,每页只加载用户需要的那一部分,那么页面的加载速度就会更快。除此之外,分页还能改善页面的展现效果,让用户更方便地查看和操作数据。
接下来,我们将介绍Bootstrap Table中两种常见的分页方式。
基本分页
基本分页是Bootstrap Table中最简单的分页方式,它不需要引入任何额外的插件。基本分页具有以下几个特点:
只有一页的数据时,分页组件不会显示;
数据量大于一页时,每页默认显示10条数据;
分页组件的样式和布局都是Bootstrap风格;
如果需要自定义分页组件样式和布局,需要手动编写CSS。
使用方法
Bootstrap Table默认开启了基本分页模式,所以我们只需要按照正常的使用方式即可。在HTML中添加一个空的table标签,并使用jQuery选择器将其转换为Bootstrap Table。我们还需要定义一个数据源,用于加载数据。
<table id="myTable"></table>
var data = [
{
"name": "张三",
"age": 18,
"gender": "男",
"hometown": "北京市"
},
{
"name": "李四",
"age": 20,
"gender": "女",
"hometown": "上海市"
}
];
$("#myTable").bootstrapTable({
data: data
});
加载数据完成后,我们就可以看到一个带有分页组件的表格了。此时,每页默认显示10条数据,如果数据量少于10条,则不会显示分页。
自定义分页参数
Bootstrap Table提供了一些选项,可以控制分页组件的显示和行为。在上面的例子中,我们只是最简单地使用了默认设置,实际上我们可以通过以下方式自定义分页参数:
pageSize: 每页显示的数据量,默认值为10;
pageList: 可以选择的每页数据量数组,默认值为[10, 25, 50, 100];
pageNumber: 默认显示第几页的数据,从1开始计数;
pagination: 是否显示分页组件,默认值为true;
onlyInfoPagination: 是否只显示分页信息(如“第1页,共1页”,不显示具体分页组件),默认值为false;
paginationLoop: 是否启用无限循环分页模式,默认值为true;
totalRows: 总数据量,如果数据源是异步加载的,则需要手动设置这个值。
下面是一个使用自定义分页选项的例子:
<table id="myTable"></table>
var data = [
{
"name": "张三",
"age": 18,
"gender": "男",
"hometown": "北京市"
},
{
"name": "李四",
"age": 20,
"gender": "女",
"hometown": "上海市"
}
];
$("#myTable").bootstrapTable({
data: data,
pagination: true,
pageSize: 5,
pageList: [5, 10, 15],
pageNumber: 2,
onlyInfoPagination: false,
paginationLoop: false,
totalRows: 10
});
在上面的例子中,我们将每页显示的数据量改为了5条,同时定义了可选的每页数据量数组。默认显示第2页的数据,并开启分页组件。如果数据量少于5条,则不会显示分页。我们还关闭了无限循环分页模式,开启了分页信息显示,并手动设置了总数据量为10。这些参数实现起来比较简单,而且可以根据实际需求进行调整。
高级分页
在某些情况下,基本分页已经无法满足我们的需求了。例如,我们需要根据用户的选择动态加载数据,或者需要根据服务器返回的信息确定分页组件的参数。这时,我们可以使用Bootstrap Table支持的高级分页方式,即通过ajax加载数据并使用服务端分页插件来实现。
高级分页具有以下几个特点:
数据源可以通过ajax请求加载;
分页和排序等操作都由服务端控制;
可以使用jQuery插件来实现复杂的分页需求;
对服务器性能有一定的要求。
使用方法
高级分页需要使用Bootstrap Table提供的ajax选项,该选项具有以下几个参数:
method: ajax请求方式,默认为get;
url: ajax请求的URL地址;
data: 额外的请求参数,可以是对象或函数;
contentType: ajax请求的Content-Type值,默认为application/json;
dataType: ajax请求的数据类型,可以是text、xml、json、jsonp等;
ajaxOptions: 其他的ajax选项,如headers、timeout等;
queryParams: 设置额外的请求参数,可以是对象或函数;
ajax:自定义ajax请求函数,用于实现非标准的ajax请求;
ajaxConfig: 设置自定义的ajax选项,如dataType、headers等。
下面是一个使用服务端分页插件的例子:
<table id="myTable"></table>
$("#myTable").bootstrapTable({
url: "/students.php",
method: "post",
dataType: "json",
pagination: true,
sidePagination: "server",
queryParams: function (params) {
return {
offset: params.offset,
limit: params.limit,
order: params.order,
search: params.search
};
},
responseHandler: function (res) {
return {
total: res.total,
rows: res.rows
};
},
columns: [
{
field: "id",
title: "ID"
},
{
field: "name",
title: "姓名"
},
{
field: "age",
title: "年龄"
},
{
field: "gender",
title: "性别"
}
]
});
在上面的例子中,我们使用了一个名为“server”的分页模式。这个分页模式表示所有的分页、排序等操作都由服务端来处理。具体来说,我们需要在服务端实现一个接口(例如叫做“students.php”),根据参数offset、limit、order、search等参数返回对应的数据。在前端,我们需要设置url为这个接口的地址,并开启pagination选项。queryParams函数用来设置额外的请求参数,这些参数会随着每次分页、搜索等操作被提交到服务端。responseHandler函数用来将服务端返回的数据格式化成BootstrapTable可以识别的格式(即total和rows)。
总结一下,使用高级分页需要做以下几个事情:
在服务端实现一个接口,用于返回分页数据;
在前端设置分页选项和ajax选项;
在前端设置columns选项,定义表格的列。
这些步骤看起来比较繁琐,但只要掌握了流程之后就可以快速上手了。
分页插件
某些情况下,服务端无法直接返回分页数据,或者返回的数据格式不符合BootstrapTable的要求。这时,我们可以使用一些jQuery分页插件来替代服务端分页。
常见的BootstrapTable分页插件包括Bootstrap Table Paginator和Bootstrap Table Fixed Pagination,它们具有以下特点:
左右对齐的分页组件,外观与Bootstrap一致;
支持跳转到任意页、显示总页数等操作;
可以使用Bootbox模态框等扩展组件。
比较常用的是Bootstrap Table Fixed Pagination插件,它具有以下几个特点:
固定在页面底部的分页组件,自适应宽度;
支持快速跳转到第一页和最后一页;
可以设置每页显示的数据量、可选的每页数据量等;
支持自定义样式和回调函数等。
使用Bootstrap Table Fixed Pagination插件需要以下步骤:
引入固定分页插件的CSS和JS文件(注意需要在BootstrapTable之前引入);
在选项中设置pagination为false,表示关闭BootstrapTable默认的分页模式;
在选项中设置fixedPagination为true,表示开启固定分页模式;
在选项中设置fixedNumber为true,表示鼠标滚动时固定分页组件不会跟随滚动;
在选项中设置fixedTotalPages为true,表示显示所有的页码。如果设置为false,则只会显示当前页和相邻的页码;
使用onLoadSuccess回调函数在数据加载成功后调用pagition插件的方法,初始化分页组件;
使用自定义的ajax请求函数,从服务端加载数据。
下面是一个使用Bootstrap Table Fixed Pagination插件的例子:
<link rel="stylesheet" href="bootstrap-table-fixed-pagination.css">
<script src="bootstrap-table-fixed-pagination.js"></script>
<table id="myTable"></table>
$("#myTable").bootstrapTable({
pagination: false,
fixedPagination: true,
fixedNumber: true,
fixedTotalPages: true,
columns: [
{
field: "id",
title: "ID"
},
{
field: "name",
title: "姓名"
},
{
field: "age",
title: "年龄"
},
{
field: "gender",
title: "性别"
}
],
onLoadSuccess: function () {
$("#myTable").next(".fixed-table-pagination").pagination("start");
}
});
在上面的例子中,我们引入了固定分页插件的CSS和JS文件,然后开启了固定分页模式。每次加载数据完成后,我们调用pagination插件的start方法来初始化分页组件。由于使用了自定义的ajax请求函数,我们需要在这个函数中手动调用success函数,并将响应数据传递给BootstrapTable。
总结
分页是Web应用中一个十分重要的功能,可以提升用户体验和数据展现效果。本文介绍了Bootstrap Table中两个常见的分页方式:基本分页和高级分页。基本分页是默认开启的,使用起来非常简单,但只适用于少量数据。高级分页则需要在服务端实现接口,并使用ajax加载数据。如果服务端无法直接返回分页数据,可以使用一些jQuery分页插件来替代服务端分页。毋庸置疑,分页功能对于任何一个Web应用来说都是至关重要的,希望本文对读者有所帮助。