• datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)


    一、动态定义列头

    在ajax中,用datatable再去重新配置列头,当然传回的数据中,要有对应放列头的键值对

    我自定义了Mock数据,用于前端自己交互。

    其中,rowdata用于存放传回的数据,col_define用于存放定义的列头,targets表示第几列,title表示列名,data是为了对应data下的rowdata数据

    $.mockjax({
        url: "/salary_import",
        status: 200,
        responseText: {
            'code': 'ok',
            'Msg': '小垃圾',
            'data': {
                'rowdata': [
                    {
                        '名字': '呆头鹅',
                        '身份证': 123456789451,
                        'exist': 0,
                        '基本工资': 1000,
                        '职位工资': 100,
                        '绩效工资': 10,
                        '应扣工资': 2000
                    }, {
                        '名字': '小学鸡',
                        '身份证': 12123214124,
                        'exist': 0,
                        '基本工资': 2000,
                        '职位工资': 300,
                        '绩效工资': 30,
                        '应扣工资': 3000
                    }, {
                        '名字': '奔比',
                        '身份证': 123456789451,
                        'exist': 0,
                        '基本工资': 1000,
                        '职位工资': 100,
                        '绩效工资': 10,
                        '应扣工资': 2000
                    }],
                'col_define': [{
                    'targets': 0,
                    'data': '名字',
                    'title': '名字'
                }, {
                    'targets': 1,
                    'data': '身份证',
                    'title': '身份证'
                }, {
                    'targets': 2,
                    'data': '基本工资',
                    'title': '基本工资'
                }, {
                    'targets': 3,
                    'data': '职位工资',
                    'title': '职位工资'
                },{
                    'targets': 4,
                    'data': '绩效工资',
                    'title': '绩效工资'
                },{
                    'targets': 5,
                    'data': '应扣工资',
                    'title': '应扣工资'
                }]
            }
        }
    });

    那么你ajax交互的时候,就可以

    var opts = [];
    $.ajax({ url:
    '/salary_import', type: 'POST', async: false, cache: false, dataType: 'json', beforeSend: function () { }, success: function (res) { if ('ok' === res['code']) { alert('解析完成!'); console.log('返回数据 是', res['data']); opts.data = res['data']['rowdata']; // opts.data = res.data.rowdata; console.log(opts.data); opts.columns = res['data']['col_define']; var excel = $('#salary_excel_table').DataTable({ 'language': lan, "dom": 'lB<"top"f><"toolbar">rt<"bottom"ip><"clear">', "paging": true, "lengthChange": true, "info": true, 'destroy': true, "deferRender": true, 'columns': opts.columns, 'data': opts.data, });

    不知道是否是插件之间兼容性问题,反正,如果我直接先在外面初始化了datatable,给opts先赋了初始配置值,然后再在ajax下,通过改变对应变量再赋值回datatable下的配置文件,即

      var excel = $('#salary_excel_table').DataTable(opts);会莫得什么卵用,因为我百度上都是这样教的,可能单单是我的问题吧,只能重新写份自定义配置,会保险很多,这里就是动态定义列头了,通过后台给的数据,直接描绘前端的列头
    二、给某行添加事件
    var person=$('#person_table').Datatable(..........);//里面的配置自己去配置你们想要后台给你们的data,格式就不教了
    $("#person_table").on("click","tr",function(){ var table_data =person.row(this).data(); console.log(table_data); var department=table_data.department; var id=table_data.id; var name=table_data.name; $.ajax({ url:'/point', type:'POST', data:{ department:department, id:id, name:name }, cache: false, async: true, success: function (result) { console.log(result); var m = $('#money_table').DataTable(); reloadData(m, result['data']['data_money']); }, error: function () { alert('德玛西亚') } }) });
    function reloadData(table, dataList) {
    var currentPage = table.page();
    table.clear();
    table.rows.add(dataList);
    table.page(currentPage).draw(false);
    };
     

    点击Datatable下某行,就能够获取到该行数据,放好id,姓名和部门,然后用ajax将这三个数据发给后台,让后台返回给你需要的数据,去渲染另一个datatable(这里你随便怎样都可以,也可以做跳转啥的),重要的是前后端那些数据格式要对好,不然都会出现列数据对不到的错误,还有就是这个reloadData很重要!

    三、初始显示空数据

    这个就更简单了,你一开始配置表格的时候嘛,可以不写ajax,但是写好列行数据格式,反正没人传给你的会,就是空,等你点击什么或者导入什么的时候,success了再ajax到对应的表的行数据就行了

    (所以看清楚,一开始再DataTable里没有AJAX数据获得的话,就是没有行数据的,会显示没有数据,但是列头还是存在的,所以下面没有ajax)

    var money_table = $('#money_table').DataTable({
        'language': lan,
        "dom": 'lB<"top"f><"toolbar">rt<"bottom"ip><"clear">',
        "paging": true,
        "lengthChange": true,
        "info": true,
        "order": [
            [0, "desc"]
        ],
        "columnDefs": [
            {
                "title": "应发",
                "targets": 0
            },
            {
                "title": "应扣",
                "targets": 1
            },
            {
                "title": "实发",
                "targets": 2
            },
            {
                "title": "个税",
                "targets": 3
            },
            {
                "title": "年月",
                "targets": 4
            },
            {
                "title": "功能",
                "targets": 5 ,
                "render": function (data, type, full, meta) {
                    if (data) {
                        return express_html
                    } else {
                        return ''
                    }
                }
            }
        ],
        'columns':[
            {'data':'yf'},
            {'data':'yk'},
            {'data':'sf'},
            {'data':'gs'},
            {'data':'yy-mm'},
            {'data':null}
        ],
        'destroy':true,
        "deferRender": true
    });
     
  • 相关阅读:
    JDK、JRE、JVM的区别联系
    1.1 计算机基础知识 —— 二进制
    java--面试中遇到的各种比较区别
    springMVC 运行流程
    算法--常用排序和查找
    Java面试问题总结
    dpkg:error错误求解:——重复文件触发关注
    memcpy实现
    Palindrome Number
    no matching function for call to 'sort(...),
  • 原文地址:https://www.cnblogs.com/qq946487854/p/10190281.html
Copyright © 2020-2023  润新知