整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Bootstrap-Table10分钟入门,怎么学和

Bootstrap-Table10分钟入门,怎么学和用?(二)


ootstrap-Table文档



接上一篇。上回简单介绍了BootstrapTable的常用函数,这回主要介绍属性设置。

<link href="*.css"><!--CSS 引用bootstrap.min.css和bootstrap-table.min.css-->
  <script src="*.js"><!--JS包引用, jquery.min.js,bootstrap.min.js,bootstrap-table.min.js-->

<table id="ID"></table>   <!--html代码-->

$("#ID").bootstrapTable({键:值,键:值,键:值,键:值……})//bootstrapTable函数


以上简写成“骨架”。分三步用,

1.引用,

注意点:js的引用顺序,js包里面可以理解为从上到下的程序集,BootstrapTable以Jquery为基础的,所以一定以Jquery引用为先,接着是bootsrtap.js,最后是Bootstrap-Table.js。

2.HTML标签

注意点:一般写在Table标签里,数据放到哪个Table呢,这里用的Jquery获取DOM id为ID的对象。当然也可以使用类选择器,最好是唯一,建议用id选择器标识。

3.使用函数

这里举例的是其中一个最最常用的bootstrapTable({...}),以Ajax形式取数据的函数。

属性Url:"路径"。路径。

  • 可以是本地JSON文件,
  • 可以是预定义的JSON数据,
  • 也可以是路由到后端(后台)取数据的方法,

例如通过服务器路由到达MVC中的Controller里的GetData(string id)

属性queryParams,可选参数,如刚才所说GetData方法中的id

queryParams:function(){return id:"123"}//这里是一个function

也可以直接写{id:"123"}

属性columns:定是各列数据。是JSON格式[{},{},{}……]

定义每一列以这样的形式{键:值},


常用的有:

{field:"后台返回JSON数据或对象的属性名",

title:"显示在表格上的列名",

}

以上定义列中还会有一些可选属性formatter、editable,如editable需要另外引入相应的js文件。

Bootstrap-table的入门分享到这里,认为远远不止这些,动手才是入门的正式开始,一起加油吧!

建议看看文档例子。

谢谢阅读。下回继续分享Bootstrap File Input上传插件。


fileinput上传插件


举例工作中开发物流分车程序的代码,代码定义两列“序号”、"车号"

ootstrap Table 封装了一套完善的数据表格组件,把下面的代码复制一下估计你需要的基本功能都有了,没有的再看看手册看着我给的实例也能很快的熟悉了。

客户端

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>Bootstrap-Table</title>
 <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.min.css"/>
 <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() {
 //根据窗口调整表格高度
 $(window).resize(function() {
 $('#mytab').bootstrapTable('resetView', {
 height: tableHeight()
 })
 })
 
 $('#mytab').bootstrapTable({
 url: "index.php",//数据源
 dataField: "rows",//服务端返回数据键值 就是说记录放的键值是rows,分页时使用总记录数的键值为total
 height: tableHeight(),//高度调整
 search: true,//是否搜索
 pagination: true,//是否分页
 pageSize: 20,//单页记录数
 pageList: [5, 10, 20, 50],//分页步进值
 sidePagination: "server",//服务端分页
 contentType: "application/x-www-form-urlencoded",//请求数据内容格式 默认是 application/json 自己根据格式自行服务端处理
 dataType: "json",//期待返回数据类型
 method: "post",//请求方式
 searchAlign: "left",//查询框对齐方式
 queryParamsType: "limit",//查询参数组织方式
 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"//垂直
 },
 {
 title: "ID",//标题
 field: "id",//键名
 sortable: true,//是否可排序
 order: "desc"//默认排序方式
 },
 {
 field: "name",
 title: "NAME",
 sortable: true,
 titleTooltip: "this is name"
 },
 {
 field: "age",
 title: "AGE",
 sortable: true,
 },
 {
 field: "info",
 title: "INFO[using-formatter]",
 formatter: 'infoFormatter',//对本列数据做格式化
 }
 ],
 onClickRow: function(row, $element) {
 //$element是当前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;
 }
 /**
 * 列的格式化函数 在数据从服务端返回装载前进行处理
 * @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>

服务端:

<?php
/**
 * 服务端模拟数据
 */
 
//前端期望数据为json
header("Content-Type:application/json;charset=utf-8");
//post 请求 请求内容类型为 application/x-www-form-urlencoded 如果是 application/json 则需要另行处理 $_POST 数组不会被填充
 
//为了保持模拟的数据
session_start();
 
if ($_SESSION['emulate_data']) {
 //已生成
} else {
 $list=[];
 //第一次会模拟个数据
 for($i=1; $i < 50; $i ++) {
 $list[]=[
 "id"=> $i,
 "name"=> substr(str_shuffle(implode('', range('a', 'z'))), 0, 5),
 "age"=> mt_rand(10, 30)
 ];
 }
 $_SESSION['emulate_data']=$list;
}
 
$list_temp=[];
//检索
if (isset($_POST['search']) && !empty($_POST['search'])) {
 foreach ($_SESSION['emulate_data'] as $key=> $row) {
 if (strpos($row['name'], $_POST['search']) !==false
 || strpos($row['age'], $_POST['search']) !==false) {
 $list_temp[]=$_SESSION['emulate_data'][$key];
 }
 }
} else {
 $list_temp=$_SESSION['emulate_data'];
}
//排序
if (isset($_POST['sort'])) {
 $temp=[];
 foreach ($list_temp as $row) {
 $temp[]=$row[$_POST['sort']];
 }
 //php的多维排序
 array_multisort($temp,
 $_POST['sort']=='name' ? SORT_STRING : SORT_NUMERIC,
 $_POST['order']=='asc' ? SORT_ASC : SORT_DESC,
 $list_temp
 );
}
 
//分页时需要获取记录总数,键值为 total
$result["total"]=count($list_temp);
//根据传递过来的分页偏移量和分页量截取模拟分页 rows 可以根据前端的 dataField 来设置
$result["rows"]=array_slice($list_temp, $_POST['offset'], $_POST['limit']);
 
echo json_encode($result);

如上的json数据(当然我前台设置的期望数据类型是json,php 直接encode一个 ["total"=>200, "rows"=>[[],[],][,][,]]的数组就完事了,方便)

2、且其请求后端是传递的内容格式默认为 application/json 我自己习惯用方便的 x-www-form-urlencoded

如果大家还想深入学习,可以私信小明,为大家提供一套前端的学习资料:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

求:bootstrap-table 实现在点击行第二次的时候还是选中状态,原因是因为项目中在表格最后面加了一列按钮操作行数据,点击按钮会弹出新页面,新页面是将行数据以其他形式展示出来。如下图点击“请求详情”在弹出的新页面获取到行数据。

可以通过设置如下属性来实现点击行的时候选中行

clickToSelect:true,
singleSelect:true,

但是如果点击一个按钮两次,第二次行就变成非选中状态,在弹出的新页面也无法获取到选中行的数据。。。

一个方法可以将行数据在页面跳转的时候附在url后面直接传递过去,但传递长度有限,不适合本次想要实现的效果。另一种可以只传行id过去,在新的页面重ajax请求去请求数据,但其实数据都一样,在请求一遍要消耗性能,这里只想说在另一个页面通过 xxTable.bootstrapTable('getSelections')来获取选择行的数据,并在页面直接作填充展示。

程序员的固执有时候就是这么朴实无华。。。。

一开始通过查看html页面发现行选中是通过在行上添加selected的class属性,于是一顿操作实现了通过代码动态添加selected。

但是bootstrap-table好像不认帐,通过添加class属性来实现行选中的效果,行虽然是选中效果,但当你要用xxTable.bootstrapTable('getSelections')来获取选择行的数据的时候,根据就拿不到数据。。。。

后来求助度娘,看到如下写法

onClickCell:function(field, value, row, $element){
  if(field==“checkbox”){
  	$element.children().click();
  }
}

然后就有了。。。。

onClickCell:function(field,value,row,$element){
  if(field=="operCommand"){
      if($element.parent().hasClass("selected")){
          $element.parent().children(':first').children(':first').click()
      }
  }
},

达到了重复点击按钮的时候行可以是一直选中状态。

请不要骂我。