Bootstrap-table 爬坑之旅

继上次被坑后,由于未做笔记, 没想的我再次败在这个坑上, 自我感觉我还将使用bootstraap-table一段时间, 所以为了避免下次再被这个坑坑一个下午的时间. 我决定将它记录下来.

使用场景

首先, 前端table插件有很多, 但是由于它是我接触的第一个,所以可能会用它一定的时间.

后台管理、数据报表这类页面很常见:表格要分页、排序、勾选、行内操作按钮。Bootstrap-table 和 Bootstrap 样式体系配套,文档和示例也多。我采用的是 data-url 方式,数据与视图分离——表头、列定义写在 HTML 或 JS 里,数据由后端接口返回 JSON,前端只负责展示和交互。

典型初始化大致是这样(当时环境:Bootstrap 3 + jQuery + bootstrap-table 1.x,具体小版本记不清了):

<table id="table"
       data-toggle="table"
       data-url="/api/list"
       data-pagination="true"
       data-side-pagination="server">
  <thead>...</thead>
</table>

side-pagination: server 表示分页、排序参数发给服务端,适合数据量大的列表。

坑点记录

坑:

  1. 在operation的formatter和events的设定时, 切记不要设置data-field的值,否则会出现events显示不了的情况 .

操作列(编辑、删除之类)一般会配 formatter 画按钮,再用 events 绑点击。列定义示例:

{
  title: '操作',
  // 不要写 data-field: 'operation' 这类字段名
  formatter: operateFormatter,
  events: operateEvents
}

如果在 <th> 上写了 data-field="operation",或者列配置里给了会和后端字段冲突的 field,bootstrap-table 有时会把这一列当成普通数据列处理,formatter 能出按钮,events 却绑不上,点按钮没反应。我当时对着控制台查了半天,最后发现是 data-field 惹的祸。操作列要么不设 field,要么用不会和接口字段重名的占位符,以项目文档为准。

  1. 在引入js拓展时,注意后面的js不能与其冲突,导致改变引入顺序

bootstrap-table 本体依赖 jQuery,不少拓展(editable、export、filter 等)还要在本体之后按顺序加载。若把 export 插件放在 table 核心前面,或者和别的表格插件、全局 $ 污染冲突,会出现「表格空白」「拓展方法 undefined」等现象。

当时页面大致顺序:

  1. jQuery
  2. Bootstrap JS
  3. bootstrap-table.min.js
  4. 各 locale / 拓展(bootstrap-table-zh-CN.min.jstableExport 等)
  5. 业务初始化脚本

改引入顺序能好、改回去又坏,多半是依赖链或重复引入的问题。用浏览器 Network 看是否 404,Console 看 $().bootstrapTable 是否存在。

小结

两个坑都不在「业务逻辑」,而在列配置约定静态资源顺序。记一笔,下次少亏一个下午。

版权声明: 本文首发于 指尖魔法屋-Bootstrap-table 爬坑之旅https://blog.thinkmoon.cn/post/157-notes-component-bootstrap-table/) 转载或引用必须申明原指尖魔法屋来源及源地址!