bootstrap table使用小记
bootstrap table是一个非常不错的,基于bootstrap的插件,它扩展和丰富了bootstrap表格的操作,如格式化表格,表格选择器,表格工具栏,分页等等。
最近基于bootstrap开发一个开台发布系统,就开发过程中,使用bootstap table遇到的一些问题及收获记录如下:
开始使用:
需要在你自己的页面中引入以下样式及脚本:
<link rel="stylesheet" href="bootstrap.min.css">
<link rel="stylesheet" href="bootstrap-table.css">
<script src="jquery.min.js"></script>
<script src="bootstrap.min.js"></script>
<script src="bootstrap-table.js"></script>
https://github.com/wenzhixin/bootstrap-table/
一、Bootstrap table 支持超多列,会自动显示水平滚动条。
我们用bootstrap开发,经常会遇到一个头疼的问题,如果客户要求表格中显示的列较多,无论我们用bootstrap的哪种布局方式,显示效果都不尽人意。Bootstap table很好的协处理了这个问题,使我们能够在不改变原有的布局方式的情况下,很好的处理超多列的问题,而且支持自定义显示列名,效果如下:
使用方式很简单,在一个普通的表格中设置data-toggle="table",就可以在不写JavaScript的情况下启用Bootstrap Table。当然还可以通过脚本的方式触发:
$('#table').bootstrapTable({
url: 'data.json'
});。
是不是很好使呢,只在我们指定的表格中会带入Bootstrap Table的样式,其它未指定的,不会受影响。
二、结合Bootstrap Modal作弹出表格子页面,并获取当前选中的数据后更新到父页面中:
功能说明:
用户点父页面中的某一输入框,系统会弹出一个查询界面,供用户检索选择相关的数据。
页面布局思路:
首先创建一个Modal分部视图:
- <!-- Modal -->
- <div class="modal fade" role="dialog" aria-labelledby="gridSystemModalLabel" id="gridSystemModal">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
- <h4 class="modal-title" id="gridSystemModalLabel">xxxx查询</h4>
- </div>
- <div class="modal-body">
- <div class="container-fluid" id="fjShipChkList">
- @Html.Partial("Modal/FjShipChkList")
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
- <button type="button" class="btn btn-primary">选择</button>
- </div>
- </div><!-- /.modal-content -->
- </div><!-- /.modal-dialog -->
- </div><!-- /.modal -->
Modal分布视图:CustomModal
以及我们要显示业务数据的列表分部视图,并被Modal分部视图调用:
- <div class="row table-toolbar">
- <div class="col-md-12">
- <div class="pull-right form-inline">
- <div class="form-group">
- <div class="input-group input-medium">
- <input type="text" class="form-control input-search" placeholder="航次" id="fjShipChkList-keyword" name="keyword" value="" />
- <span class="input-group-btn">
- <button class="btn btn-success btn-search" type="button" id="modal-search">搜索</button>
- </span>
- </div>
- </div>
- </div>
- </div>
- </div>
- <table class="table table-striped table-bordered table-hover js-table" data-toggle="table"
- data-url="data1.json" data-height="" data-click-to-select="true"
- data-select-item-name="radioName" id="table-ShipChk">
- <thead>
- <tr>
- <th data-field="state" data-radio="true"></th>
- <th class="sorting" aria-column="SHIP_NM">船名</th>
- <th class="sorting" aria-column="SHIP_NM_EN">英文船名</th>
- <th class="sorting" aria-column="VOY_ID">航次</th>
- <th class="sorting" aria-column="DOCK_BTH_NM">停靠泊位</th>
- <th class="sorting" aria-column="ARR_DT">到港时间</th>
- </tr>
- </thead>
- <tbody id="body-fjShipChkList">
- @if (Model.GetType() != typeof (QUARANTINE_HANDLE_RESULT))
- {
- int i = ;
- foreach (VOYAGE_DYNM item in Model.PageList)
- {
- <tr class="odd gradeX">
- <td class="bs-checkbox"><input data-index="@(i++)" name="radioName" type="radio"></td>
- <td>
- @Html.DisplayFor(it => item.SHIP_NM)
- </td>
- <td>
- @Html.DisplayFor(it => item.SHIP_NM_EN)
- </td>
- <td>
- @Html.DisplayFor(it => item.VOY_ID)
- </td>
- <td>
- @Html.DisplayFor(it => item.DOCK_BTH_NM)
- </td>
- <td>
- @Html.DisplayFor(it => item.ARR_DT)
- </td>
- </tr>
- }
- }
- </tbody>
- </table>
业务数据分部视图
在父页面中调用Modal分部视图:
@Html.Partial("Modal/CustomModal")
引入Modal分部视图的位置最好是与父页面中的顶层元素为兄弟节点,避免Modal调用失败。
需要在启动Modal 弹出层的元素上加上:data-toggle="modal" data-target="#gridSystemModal"就可以启动Modal了。点探索时,用ajax从后台取数据,并返回一个分部视图,返回成功后直接替换原有的业务数据分部视图。
好了,说了这么多都和我们的主角没多大关系,现在言归正传,搬出我们的主角。现在Modal登场了,我们会想,怎么让这个弹出页面和我们的父页面交互数据呢?我采用的方式是Bootstrap Table,原因很简单:Bootstrap Table天生就是用来处理bootstrap table的,功能强悍,使用简单。
首先,在我们的业务数据分部视图中,
- <table class="table table-striped table-bordered table-hover js-table" data-toggle="table"
- data-url="data1.json" data-height="" data-click-to-select="true"
- data-select-item-name="radioName" id="table-ShipChk">
- <thead>
- <tr>
- <th data-field="state" data-radio="true"></th>
- <th class="sorting" aria-column="SHIP_NM">船名</th>
- <th class="sorting" aria-column="SHIP_NM_EN">英文船名</th>
- <th class="sorting" aria-column="VOY_ID">航次</th>
- <th class="sorting" aria-column="DOCK_BTH_NM">停靠泊位</th>
- <th class="sorting" aria-column="ARR_DT">到港时间</th>
- </tr>
- </thead>
- <tbody id="body-fjShipChkList">
- @if (Model.GetType() != typeof (QUARANTINE_HANDLE_RESULT))
- {
- int i = ;
- foreach (VOYAGE_DYNM item in Model.PageList)
- {
- <tr class="odd gradeX">
- <td class="bs-checkbox"><input data-index="@(i++)" name="radioName" type="radio"></td>
- <td>
- @Html.DisplayFor(it => item.SHIP_NM)
- </td>
- <td>
- @Html.DisplayFor(it => item.SHIP_NM_EN)
- </td>
- <td>
- @Html.DisplayFor(it => item.VOY_ID)
- </td>
- <td>
- @Html.DisplayFor(it => item.DOCK_BTH_NM)
- </td>
- <td>
- @Html.DisplayFor(it => item.ARR_DT)
- </td>
- </tr>
- }
- }
- </tbody>
- </table>
业务数据Table
加入了:data-url="data1.json" data-height="299" data-click-to-select="true" data-select-item-name="radioName",其中data-select-item-name指明我们的表格是radio方式的,只能选择其中某一行(当然也可以支持多行选择)。然后再按官方文档,上个小菜,一切即将搞定,是该收拾下班了:
- $("#gridSystemModal .btn-primary").click(function () {
- var selectRow = $("#table-ShipChk").bootstrapTable('getSelections');
- if (selectRow.length < 1) {
- selectRow = $table.bootstrapTable('getSelections');
- if (selectRow.length < 1){
- alert("请先选择船舶!");
- return;
- }
- }
- $("#SHIP_NAME").val(selectRow[0][1].trim());
- $("#VOYAGE_NO").val(selectRow[0][3].trim());
- $("#SHIP_NM_EN").val(selectRow[0][2].trim());
- $("#DOCK_BTH_NM").val(selectRow[0][4].trim());
- $("#ARR_DT").val(selectRow[0][5].trim());
- $("#gridSystemModal").modal('hide');
- });
获取选中的数据行
But,意外发生了,就算我把那个选择按钮点破了,也选不中我要的数据。Why???为什么,为什么。。查官方文档,就是一名$("#table-ShipChk").bootstrapTable('getSelections')搞定的事,为什么在我这就搞不定了,度娘,GG一无所获。用Bootstrap Table的初衷,就是它简单,强大呀,怎么会这样呢,好吧,加班,查查查。。
问题就出在,每次ajax请求数据后,我都是返回一个新的分部视图去替换原有的分部视图,替换后没有把Bootstrap Table启动起来,别人还在睡大觉呢,你怎么‘getSelections’,它都不鸟你。
好吧,在ajax success中补它一刀:$("#table-ShipChk").bootstrapTable();
好了,Bootstrap Table醒了,我可以下班了。
未完,无续。。
bootstrap table使用小记的更多相关文章
- 使用bootstrap table小记(表格组件)
前言 新的一年悄然到来,生活依旧.最近一周大热的赵雷风,一首<成都>,一首<理想>再次把民谣展示在国人面前.歌词着实写的不错. 理想,你今年几岁 你总是诱惑着年轻的朋友 你总是 ...
- BootStrap table使用
bootstrap table git address https://github.com/wenzhixin/bootstrap-table 引入文件 <link rel="sty ...
- bootstrap Table 中给某一特定值设置table选中
bootstrap Table 中给某一特定值设置table选中 需求: 如图所示:左边地图人员选定,右边表格相应选中. 功能代码: //表格和图标联动 function changeTableSel ...
- JS组件系列——表格组件神器:bootstrap table
前言:之前一直在忙着各种什么效果,殊不知最基础的Bootstrap Table用法都没有涉及,罪过,罪过.今天补起来吧.上午博主由零开始自己从头到尾使用了一遍Bootstrap Table ,遇到不少 ...
- JS组件系列——表格组件神器:bootstrap table(二:父子表和行列调序)
前言:上篇 JS组件系列——表格组件神器:bootstrap table 简单介绍了下Bootstrap Table的基础用法,没想到讨论还挺热烈的.有园友在评论中提到了父子表的用法,今天就结合Boo ...
- JS组件系列——表格组件神器:bootstrap table(三:终结篇,最后的干货福利)
前言:前面介绍了两篇关于bootstrap table的基础用法,这章我们继续来看看它比较常用的一些功能,来个终结篇吧,毛爷爷告诉我们做事要有始有终~~bootstrap table这东西要想所有功能 ...
- JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
前言:最近项目里面需要用到表格的冻结列功能,所谓“冻结列”,就是某些情况下表格的列比较多,需要固定前面的几列,后面的列滚动.遗憾的是,bootstrap table里自带的fixed column功能 ...
- JS组件系列——Bootstrap Table 表格行拖拽
前言:之前一直在研究DDD相关知识,好久没更新JS系列文章了.这两天做了一个简单的业务需求,觉得效果还可以,今天在这里分享给大家,欢迎拍砖~~ 一.业务需求及实现效果 项目涉及到订单模块,那天突然接到 ...
- JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)
前言:前天刚写了篇JS组件系列——Bootstrap Table 表格行拖拽,今天接到新的需要,需要在之前表格行拖拽的基础上能够同时拖拽选中的多行.博主用了半天时间研究了下,效果是出来了,但是感觉不尽 ...
随机推荐
- jquery实现定时调度(倒计时)
工作需要实现了倒计时的脚本,代码如下: /** * 倒计时 * @param infoId :信息显示的id 最好是用span包裹 * @param callback:倒计时结算后的回调 */ fun ...
- HTML5 canvas 合成属性
合成属性 globalAlpha 设置或返回绘图的当前 alpha 或透明值 globalCompositeOperation ...
- C#中启动外部应用程序
C#中我们可以通过Process类直接启动外部应用程序 代码如下: Process p = new Process(); p.StartInfo.FileName ...
- Java 的简单了解
本文是主要根据百度百科以网上一些资料,整理的一点对Java的浅显的了解,不当之处,还请大家批评指正. 最初见到Java这个单词,是在以前的手机上,游戏启动时总会显示java的图标和名字,就感觉java ...
- DEDE提高生成HTmL的速度
1.找到include/inc/inc_fun_SpGetArcList.php打开之. 2.查找以下代码: for($i=0;$i<$ridnum;$i++){ if($tps ...
- 利用shell脚本函数实现网络连通性的检测
通常情况下,linux系统网络连通性的检测有两种方法: 1.通过“ping指令 + 目标IP” 或者 “ping指令 + 目标IP域名” 注意针对IPv6地址的IP网络检测需要试用ping6,同时pi ...
- twisted(2)--聊天系统
我们今天要做一个聊天系统,这样可以和我们之前flask api那系列文章结合起来:其次,聊天系统最能代表tcpserver,以后可以套用各种模型,比如我们公司做的物联网,其实就是把聊天系统简化一下. ...
- OpenStack点滴02-WSGI
OpenStack对外提供REST API,那么REST API是如何建立起来的呢? OpenStack用了一种叫WSGI(Web Service Gateway Interface)的东西,WSGI ...
- 【学习笔记】【Foundation】数组
数组:可重复,有序 不可变数组 创建数组 //array开头的方法是类方法,init开头的是实例方法 //NSArray* arr=[[NSArray alloc]initWithObjects:@& ...
- 关于tcc、tlink的编译链接机制的研究
1.学习过程 在c:\下建立文件夹c,并将编译器tcc.exe.连接器tlink.exe.相关文件c0s.obj.cs.lib.emu.lib.maths.lib放入文件夹中. 要搭建一个简单的C语言 ...