集成JQuery.DataTable常见问题记录

2017-08-29  本文已影响0人  vengo_mo

最近用网上一些开源免费的Bootstrap模板做开发的时候发现很多模板集成的table插件都用的是jquery的DataTable插件,读了一下官方文档发现不太好理解(估计是蠢的原因)。想着写篇快速上手的文章供大家参考,发现好像也没太大必要(官方有详细文档,读起来需要花点时间),还是记录一下开发中遇到的问题就算了(方便自己以后忘了回来看,哈哈)。

先上官方网站&中文网

1. 指定返回json中数据源data& recordsTotal & recordsFiltered

DataTable 要求服务器返回的json里面必须含有特定的字段名(具体看文档),但是你后台返回的字段名跟它不对应,那就可以在option中的ajax中的dataSrc中配置,下面是参考代码

$('#tableId').DataTable( {
        ......
        ajax:  {
          ......
          dataSrc: function(json) {
            json.recordsTotal = json.totalElements;
            json.recordsFiltered = json.totalElements;
            //必须返回是dataSrc数据!!!
            return json.content;
          }
        }
        ......
      });

2. 修改请求参数,添加查询条件(如:pageNum,pageSize)

DataTable 默认发送参数里面,分页大小是length,没有页码,有页的开始位置(类似hibernate里面offSet)start
如果你是使用像Spring提供的分页类Page的话,分页参数就是size分页大小,page页码,那么默认的参数就不符合你的要求了,这时候可以类似上述例子1中那样修改请求参数

$('#tableId').DataTable( {
          ......
          data: function ( d ) {
            // 每次reload都会运行此方法
            //添加符合你后台分页要求的参数
            d.size = d.length;
            d.page = d.start/d.length;
            //添加查询条件
            //动态的form条件<form id="form-params">......</form>
            var params = $('#form-params').serializeArray();
            for (var i=0;i<params.length;i++) {
              d[params[i].name] = params[i].value;
            }
          }
          ......
      });

3. 自定义工具栏

最好事先读dom的解释,这里不详细解释

$('#tableId').DataTable( {
        ......
        //定义DataTable的Dom构成
        dom: '<"toolbar">frtip'
        ......
      });
//拼接按钮
$("div.toolbar").html('<button type="button" onclick="alert (\'button click\')"> ');

4. 自定义ajax function

$('#tableId').DataTable( {
        ......
        //定义ajax function
        //data - 查询参数
        //callback - datatable回调函数callback(data),必须运行才能显示数据
        //settings - datatable设置
        ajax: function(data, callback, settings) {
          // paga param
          data.size = data.length;
          data.page = data.start/data.length;
          //query params
          var params = $('#form-params').serializeArray();
          for (var i=0;i<params.length;i++) {
            data[params[i].name] = params[i].value;
          }
          //sort params
          var columns = data.columns;
          var orders = data.order;
          var sort = '';
          for (var i=0;i<orders.length;i++) {
            var order = orders[i];
            sort += sort==''?'':'&';
            sort += 'sort='+columns[order.column].data+','+order.dir;
          }

          $.ajax({
            url : ctx + "/dc/taskLog/doQuery.action?"+sort,
            type: 'get',
            data : data,
            dataType:'json',
            success: function(data) {
              data.recordsTotal = data.totalElements;
              data.recordsFiltered = data.totalElements;
              data.data = data.content;
              callback(data);
            }
          });
        }
        ......
      });

有什么问题可以一起交流学习。赏面的也可以请作者喝杯java,哈哈。

上一篇下一篇

猜你喜欢

热点阅读