在使用bootstrap table時可能在很多時候回用的表格來顯示數(shù)據(jù),如果自己寫那肯定沒問題浓若,但是數(shù)據(jù)展示出來就麻煩多了,然而bootstrap table 封裝了一套完善的數(shù)據(jù)表格組件观挎,把從后臺請求的數(shù)據(jù)很容易就展示出來了挪凑,bootstrap table有兩種實現(xiàn)方式,一種是通過table寫定在html里面夯巷,另一種是通過js實現(xiàn)赛惩,js實現(xiàn)比較靈活,所以這里采用js方式趁餐,下面來看實現(xiàn)喷兼。
客戶端
必須先引入相應(yīng)的css、js等文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Bootstrap-Table</title>
<link rel="stylesheet" />
<link rel="stylesheet" href="assets/bootstrap-table.css"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
</head>
<body>
<div>
<div>
<div class="col-*-12">
<div id="toolbar">
<div class="btn btn-primary" data-toggle="modal" data-target="#addModal">添加記錄</div>
</div>
<table id="mytab" class="table table-hover"></table>
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
×
</button>
<h4 class="modal-title" id="myModalLabel">添加記錄</h4>
</div>
<div class="modal-body">
<form role="form" action="javascript:void(0)">
<div class="form-group">
<input type="text" class="form-control" id="name" placeholder="請輸入名稱">
</div>
<div class="form-group">
<input type="text" class="form-control" id="age" placeholder="請輸入年齡">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" id="addRecord">提交</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script src="assets/bootstrap-table.js"></script>
<script src="assets/bootstrap-table-zh-CN.js"></script>
<script type="text/javascript">
$(function() {
//根據(jù)窗口調(diào)整表格高度
$(window).resize(function() {
$('#mytab').bootstrapTable('resetView', {
height: tableHeight()
})
})
$('#mytab').bootstrapTable({
url: "",//數(shù)據(jù)源
dataField: "rows",//服務(wù)端返回數(shù)據(jù)鍵值 就是說記錄放的鍵值是rows后雷,分頁時使用總記錄數(shù)的鍵值為total
height: tableHeight(),//高度調(diào)整
search: true,//是否搜索
pagination: true,//是否分頁
pageSize: 20,//單頁記錄數(shù)
pageList: [5, 10, 20, 50],//分頁步進值
sidePagination: "server",//服務(wù)端分頁
contentType: "application/x-www-form-urlencoded",//請求數(shù)據(jù)內(nèi)容格式 默認是 application/json 自己根據(jù)格式自行服務(wù)端處理
dataType: "json",//期待返回數(shù)據(jù)類型
method: "post",//請求方式
searchAlign: "left",//查詢框?qū)R方式
queryParamsType: "limit",//查詢參數(shù)組織方式
queryParams: function getParams(params) {
//params obj
params.other = "otherInfo";
return params;
},
searchOnEnterKey: false,//回車搜索
showRefresh: true,//刷新按鈕
showColumns: true,//列選擇按鈕
buttonsAlign: "left",//按鈕對齊方式
toolbar: "#toolbar",//指定工具欄
toolbarAlign: "right",//工具欄對齊方式
columns: [
{
title: "全選",
field: "select",
checkbox: true,
width: 20,//寬度
align: "center",//水平
valign: "middle"http://垂直
},
{
title: "ID",//標(biāo)題
field: "id",//鍵名
sortable: true,//是否可排序
order: "desc"http://默認排序方式
},
{
field: "name",
title: "NAME",
sortable: true,
titleTooltip: "this is name"
},
{
field: "age",
title: "AGE",
sortable: true,
},
{
field: "info",
title: "INFO[using-formatter]",
formatter: 'infoFormatter',//對本列數(shù)據(jù)做格式化
}
],
onClickRow: function(row, $element) {
//$element是當(dāng)前tr的jquery對象
$element.css("background-color", "green");
},//單擊row事件
locale: "zh-CN", //中文支持
detailView: false, //是否顯示詳情折疊
detailFormatter: function(index, row, element) {
var html = '';
$.each(row, function(key, val){
html += "<p>" + key + ":" + val + "</p>"
});
return html;
}
});
$("#addRecord").click(function(){
alert("name:" + $("#name").val() + " age:" +$("#age").val());
});
})
function tableHeight() {
return $(window).height() - 50;
}
/**
* 列的格式化函數(shù) 在數(shù)據(jù)從服務(wù)端返回裝載前進行處理
* @param {[type]} value [description]
* @param {[type]} row [description]
* @param {[type]} index [description]
* @return {[type]} [description]
*/
function infoFormatter(value, row, index)
{
return "id:" + row.id + " name:" + row.name + " age:" + row.age;
}
</script>
</body>
</html>
服務(wù)端:只需在接到請求時返回json數(shù)組就行了季惯,是json數(shù)組哦,不是單個對象臀突,不然就數(shù)據(jù)展示不出來勉抓。
注意bootstrap table 可以前端分頁也可以后端分頁,這里我們使用的是后端分頁候学,后端分頁時需返回含有
total:總記錄數(shù) 這個鍵值好像是固定的琳状,我看文檔沒找到可以修改成別的
rows: 記錄集合 鍵值可以修改 dataField 自己定義成自己想要的就好
{
"total":200,
"rows":[
{"id":1, "name":"sallency", "age": 26},
{"id":1, "name":"sallency", "age": 26},
{"id":1, "name":"sallency", "age": 26},
{"id":1, "name":"sallency", "age": 26},
{"id":1, "name":"sallency", "age": 26}]
}
但是這可能會有請求時數(shù)據(jù)賦值不了的情況,那時你就會干著急了盒齿,下面還可以使用如下方式進行數(shù)據(jù)渲染念逞。這個效果和上面一個不一樣,這里就不上圖了边翁。同樣第一步要引入官網(wǎng)所要求的的css/js等文件翎承。
var $table = $("#product");
$table.bootstrapTable({
url: "http://192.168.6.240:8080/form",
dataType: "json",
contentType: "application/x-www-form-urlencoded",
// toolbar: '#toolbar', //工具按鈕用哪個容器
striped: true, //是否顯示行間隔色
cache: false, //是否使用緩存,默認為true符匾,所以一般情況下需要設(shè)置一下這個屬性(*)
pagination: true, //是否顯示分頁(*)
sortable: false, //是否啟用排序
sortOrder: "desc", //排序方式
sidePagination: "client", //分頁方式:client客戶端分頁叨咖,server服務(wù)端分頁(*)
pageNumber:1, //初始化加載第一頁,默認第一頁
pageSize: 10, //每頁的記錄行數(shù)(*)
pageList:[5,10,20,30],//分頁步進值 //可供選擇的每頁的行數(shù)(*)
// search:true, //是否顯示表格搜索,此搜索是客戶端搜索甸各,不會進服務(wù)端垛贤,所以,個人感覺意義不大
// strictSearch: true,
oolbarAlign:'right',//工具欄對齊方式
buttonsAlign:'right',//按鈕對齊方式
// showColumns: true, //是否顯示所有的列
// showRefresh: true, //是否顯示刷新按鈕
minimumCountColumns: 2, //最少允許的列數(shù)
clickToSelect: true, //是否啟用點擊選中行
//height: 500, //行高趣倾,如果沒有設(shè)置height屬性聘惦,表格自動根據(jù)記錄條數(shù)覺得表格高度
uniqueId: "id", //每一行的唯一標(biāo)識,一般為主鍵列
// showToggle:true, //是否顯示詳細視圖和列表視圖的切換按鈕
cardView: false, //是否顯示詳細視圖
// detailView: false, //是否顯示父子表onEditableSave
// singleSelect: false,
// striped: true, //是否顯示行間隔色
// cache: false, //是否使用緩存儒恋,默認為true善绎,所以一般情況下需要設(shè)置一下這個屬性(*)
// sortable: true, //是否啟用排序
// pagination: true, //顯示分頁按鈕
// sortName:"starttime",
// sortOrder:"desc", //默認排序
// pageNumber: 1, //初始化加載第一頁,默認第一頁
// pageSize: 10, //默認顯示的每頁個數(shù)
// showRefresh: true, //是否顯示刷新按鈕
// showPaginationSwitch: true, //是否顯示選擇分頁數(shù)按鈕
// queryParamsType: '', //默認值為 'limit' ,在默認情況下 傳給服務(wù)端的參數(shù)為:offset,limit,sort // 設(shè)置為 '' 在這種情況下傳給服務(wù)器的參數(shù)為:pageSize,pageNumber
queryParams:function(params){
var temp = {
pageSize: params.pageSize, //頁面大小
pageNumber: params.pageNumber, //頁碼
table_data:tempdata,
}
return temp;
},
responseHandler:function(res){
//動態(tài)渲染表格之前獲取有后臺傳遞的數(shù)據(jù)時,用于獲取出除去本身渲染所需的數(shù)據(jù)的額外參數(shù)
//詳見此函數(shù)參數(shù)的api
return res;
},
// search: true, //顯示搜索框(客戶端搜索)
//sidePagination: "server", //服務(wù)端處理分頁
// showToggle:true, //是否顯示詳細視圖和列表視圖的切換按鈕
cardView: false, //是否顯示詳細視圖
// detailView: false, //是否顯示父子表
columns: [{
title : '備注',
field : 'code',
align : 'center',
width : 100,
valign : 'middle',
},{
title : '操作',
field : 'name',
align : 'center',
width : 120 ,
valign : 'middle',
},
{
title : '編碼',
field : 'calcMode',
align : 'center',
width : 120 ,
valign : 'middle',
}],
onLoadSuccess: function(){ //加載成功時執(zhí)行
alert("加載數(shù)據(jù)成功");
},
onLoadError: function(){ //加載失敗時執(zhí)行
alert("加載數(shù)據(jù)失敗");
}
});
};
會使用之后是不是覺得比自己寫的table更好用多了诫尽,還不用寫一大堆js和div等禀酱,還有更多功能可以去官網(wǎng)了解怎么使用。