bootstrap的table属性已经很熟悉了,最近遇到一个问题,犹豫每个列表加载的数据需求不同,所以需要动态的更换表头。 网上有很多加载表格数据的例子,但是却没有找到如何动态加载表格,再加在数据。 虽然可以一个表格加载一种数据,但是本着学习的态度尝试了下这种方式,结果发现是可以执行的。分享下思路和实现过程,以备日后使用。
思路:
1、写接口,查询出要展示的列。注意接口中必须要有字段中文名称(columns属性的title值),字段的英文名称(columns的field字段),特别注意filed字段应该与最后查询出的列表中返回的json数据中的key保持一致,不然取不到值。
2、ajax请求刚才的接口,查询出columns,并给table的columns赋值。
3、加载表格展示。
大致代码如下:
表格:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
var peopleOptions;
// 人口列表加载 function tableItem() {
peopleOptions = {
method : "POST" , // 使用get请求到服务器获取数据
url : path + "/api/information/people/getList" , // 获取数据的地址
contentType : "application/x-www-form-urlencoded" , // 重要否则POST会报错
striped : false , // 表格显示条纹
pagination : true , // 启动分页
pageSize : 10, // 每页显示的记录数
pageNumber : 1, // 当前第几页
pageList : [ 10, 20, 50 ], // 记录数可选列表
uniqueId : "id" ,
showColumns : false , // 显示下拉框勾选要显示的列
showToggle : false , // 显示 切换试图(table/card)按钮
clickToSelect : false , // 点击可选
singleSelect : false , // 禁止多选
maintainSelected : true , // 在点击分页按钮或搜索按钮时,将记住checkbox的选择项
sortable : true , // 禁止所有列的排序
sidePagination : "server" , // 表示服务端请求 后台分页
toolbar : "#toolbar" , // 指明自定义的toolbar
queryParamsType : "undefined" ,
queryParams : function queryParams(params) {
var param = {
pageNumber : params.pageNumber,
pageSize : params.pageSize,
orgId : ztreeId,
nodeId : ztreeId,
citizenName : $( "#fullname" ).val().trim(),
sex : $( "#sex" ).val(),
age : $( "#age" ).val().trim(),
identityCode : $( "#idCard" ).val().trim(),
cellPhone : $( "#isMobile" ).val().trim(),
adress : $( "#adress" ).val().trim(),
};
return param;
},
onLoadSuccess : function () { // 加载成功时执行
responseHandler : function (res) { // 格式化数据
console.log(res);
if (res.data.total != undefined)
tmp = {
total : res.data.total,
rows : res.data.rows
};
if (res.data.total == undefined)
tmp = {
total : res.data.length,
rows : res.data
};
return tmp;
},
columns : [ {
checkbox : true ,
title : '全选' ,
valign : 'middle'
}, {
title : '序号' ,
field : 'number' ,
width : '40px' ,
align : 'center' ,
valign : 'middle' ,
formatter : indexFormatter
}, {
title : '姓名' ,
field : 'citizenName' ,
align : 'center' ,
valign : 'middle' ,
}, {
title : '年龄' ,
field : 'age' ,
align : 'center' ,
width : 28,
valign : 'middle' ,
formatter : ageFormatter
}, {
title : '性别' ,
field : 'sex' ,
width : 28,
align : 'center' ,
valign : 'middle' ,
},{
title : '身份证号' ,
field : 'identityCode' ,
align : 'center' ,
valign : 'middle' ,
}, {
title : '民族' ,
field : 'nation' ,
align : 'center' ,
valign : 'middle' ,
} ]
}
} $table = $( "#table" ).bootstrapTable(peopleOptions);
}; |
动态获取列:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
function getColumns() {
// 加载动态表格
$.ajax({
url : path + "api/information/people/getLableColumn?ztreeId=" + ztreeId,
type : 'get' ,
dataType : "json" ,
async : false ,
success : function (returnValue) {
// 未查询到相应的列,展示默认列
if (returnValue.retCode == "0" ) {
//没查到列的时候把之前的列再给它
myColumns = $table.bootstrapTable( 'getOptions' ).columns[0];
} else {
// 异步获取要动态生成的列
var arr = returnValue.data;
$.each(arr, function (i, item) {
myColumns.push({
"field" : item.labelColumnCode,
"title" : item.labelColumnName,
"hide" : true ,
"align" : 'center' ,
"valign" : 'middle'
});
});
}
console.log(myColumns);
return myColumns;
}
});
} |
刷新列表:
1
2
3
4
5
6
7
8
9
10
|
//点击左侧树后重新加载表格 $table.bootstrapTable(
"refreshOptions" ,
{
url : path + "/api/peopledataInfo/getPeopleInfoList" , // 获取数据的地址
columns : myColumns,
}
);
}
|
需要注意的是bootstrap的table提供了两个刷新的方法,一个refresh,一个refreshOptions,前者只是刷新当前表格,后者会将表格中的组件全部更新一遍,因为我们替换了url和columns,所以需要调用后者。
展示效果:
动态加载表头其实就是类似Echart中动态加载数据的感觉一样,只是改变整个Option中的相关属性即可。
优点:代码量会大大减少,当我们要加载不同数据且样式一样的表格的时候可以采用这样的方式。
缺点:样式很难维护。前端人员不好定位bug,所以很难修改相应的样式bug。
依据项目实际情况,择优使用吧。
bootstrap table插件动态加载表头的更多相关文章
-
[转]bootstrap的table插件动态加载表头
原文地址:https://blog.csdn.net/abubu123/article/details/78060321 bootstrap的table属性已经很熟悉了,最近遇到一个问题,犹豫每个列表 ...
-
Bootstrap Table表格一直加载(load)不了数据-解决办法
bootstrap-table是一个基于Bootstrap风格的强大的表格插件神器,官网:http://bootstrap-table.wenzhixin.net.cn/zh-cn/ 这里列出遇到的一 ...
-
项目总结—jQuery EasyUI-DataGrid动态加载表头
http://blog.csdn.net/zwk626542417/article/details/19248747 概要 在前面两篇文章中,我们已经介绍了在jQuery EasyUI-DataGri ...
-
jQuery EasyUI-DataGrid动态加载表头
项目总结—jQuery EasyUI-DataGrid动态加载表头 目录(?)[-] 概要 实现 总结 概要 在前面两篇文章中,我们已经介绍了在jQuery EasyUI-DataGrid ...
-
bootstrap中的动态加载出来的图片轮播中的li标签中的class=";active";的动态添加移除
//该方法是在slide改变时立即触发该事件, $('#myCarousel').on('slide.bs.carousel', function () { $("#myCarousel o ...
-
js插件动态加载js、css解决方案
最近因为工作需要做了一个js自动导入的插件,一开始很天真的以为动态创建个script添加到head中就ok了,试了之后才发现了问题,就是如果同时引入了多个js文件,而且后一个文件中用到了前一个文件中的 ...
-
zTree树插件动态加载
需求: 由于项目中家谱图数据量超大,而一般加载方式是通过,页面加载时 zTree.init方法进行数据加载,将所有数据一次性加载到页面中.而在项目中家谱级别又非常广而深,成千上万级,因此一次加载,完全 ...
-
bootstrap 模态框动态加载数据
.页面中添加modal <!-- 模态框(Modal) --> <div class="modal fade" id="showModal" ...
-
EasyUI datagrid 动态加载表头和数据
首先返回到页面的需要是JSON数据: 第一步: 遍历表头,插入到array中 for (var i = 0; i < jsonObj.title.length; i++) { //把返回的数据封 ...
随机推荐
-
iframe自定义高度
function setIframeHeight() { var iframe=document.getElementById("iframe_id"); iframe.heigh ...
-
6种编写HTML和CSS的最有效的方法
感谢HTML5和CSS3,以及JavaScript,前端开发者有了大大的用武之地.大家都在用很多的工具和技术来武装自己,以加快前段的开发. 本文分享了6中最有效的方法,希望能提供你的效率,为你节约时间 ...
-
lightoj1085 线段树+dp
//Accepted 7552 KB 844 ms //dp[i]=sum(dp[j])+1 j<i && a[j]<a[i] //可以用线段树求所用小于a[i]的dp[j ...
-
jquery.autocomplete自动补全功能
项目实例: 一:js //SupplierAutoComplete.js $().ready(function () { $("#txtSupplier").autocomplet ...
-
Validform使用
原文链接:http://validform.rjboy.cn/document.html Validform v5.3.2 文档 Validform使用入门 绑定附加属性 初始化参数说明 Validf ...
-
Vue.js学习 Item8 -- 方法与事件处理器
方法处理器 可以用 v-on 指令监听 DOM 事件: <div id="example"> <button v-on:click="greet&quo ...
-
【Asp.Net MVC】Avoid Mass Assignment in ASP.NET MVC
Mass Assignment Vulnerability in ASP.NET MVC: http://freshbrewedcode.com/joshbush/2012/03/05/mass-as ...
-
一步一步理解 Java 企业级应用的可扩展性
摘要:本文主要介绍如何理解 Java 应用的扩展方式以及不同类型的扩展技术和具体技巧,介绍一些有关 Java 企业级应用的一般扩展策略. 老实说,"可扩展性"是个全面且详尽的话题, ...
-
Spring 类构造器初始化实例
构造方法类Bean1 package com.hao947.bean; public class Bean1 { public Bean1() { System.out.println("b ...
-
POJ 3654 &;amp; ZOJ 2936 &;amp; HDU 2723 Electronic Document Security(模拟)
题目链接: PKU:http://poj.org/problem?id=3654 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...