项目实训——数据表格

layui数据表格

table 模块是 layui 最核心的组成之一。它用于对表格进行一些列功能和动态化数据操作,涵盖了日常业务所涉及的几乎全部需求。支持固定表头、固定行、固定列左/列右,支持拖拽改变列宽度,支持排序,支持多级表头,支持单元格的自定义模板,支持对表格重载(比如搜索、条件筛选等),支持复选框,支持分页,支持单元格编辑等等一些列功能。为了满足各种情况下的需求,layui对 table 模块做了三种初始化的支持。

方法机制
方法渲染用JS方法的配置完成渲染
自动渲染HTML配置,自动渲染
转换静态表格转化一段已有的表格元素

在这我使用了方法渲染。

方法渲染

“方法级渲染”将基础参数的设定放在了JS代码中,且原始的 table 标签只需要一个选择器。

<table id="demo" lay-filter="test"></table>
var table = layui.table; //执行渲染
table.render({
  elem: '#demo' //指定原始表格元素选择器(推荐id选择器)
  ,height: 315 //容器高度
  ,cols: [{}] //设置表头
    //,…… //更多参数参考右侧目录:基本参数选项
});

工具栏

点击头部工具栏区域设定了属性为 lay-event="" 的元素时触发。

原始容器
<table id="demo" lay-filter="test"></table>
工具栏模板:
<script type="text/html" id="toolbarDemo">
    <div class="layui-btn-container">
    <button class="layui-btn layui-btn-sm" lay-event="add">添加</button>    
    <button class="layui-btn layui-btn-sm" lay-event="delete">删除</button>    
    <button class="layui-btn layui-btn-sm" lay-event="update">编辑</button>  
    </div>
</script> 
<script;>
//JS 调用:
table.render({
  elem: '#demo'
  ,toolbar: '#toolbarDemo'
  //,…… 
  //其他参数
  });

我的收藏页面

前面铺垫了那么多都是为了实现收藏页面,这个页面的功能包括数据的展示、取消收藏等。取消收藏则需要使用之前的工具栏功能,而通过点击数据行进入具体页面则需要实现行监听功能。
容器:

<div class="infolist">
    <table class="layui-hide" id="job" lay-filter="job"></table>
    <form>
        <input type="hidden" id = "jid" name="jid">
    </form>
</div>

执行数据表格的实例:

<script type="text/javascript" th:inline="none">
    layui.use('table', function(){
        var table = layui.table;
        layui.use('layer', function() {
            var layer = layui.layer;
            table.render({
                elem: '#job'
                , url: 'getlist'
                , toolbar: '#jtoolbar'
                , cols: [[
                    {type: 'checkbox', fixed: 'left'}
                    , {field: 'job_ID', width: 80, title: 'ID', sort: true}
                    , {field: 'title', width: 150, title: '名称'}
                    , {field: 'company_name', width: 100, title: '公司'}
                    , {field: 'cities', width: 100, title: '城市',}
                    , {field: 'keywords', width: 200, title: '关键词'}
                    , {field: 'ddl', width: 150, title: '截止日期', sort: true}
                    , {field: 'contactLine', title: '联系方式'}
                ]]
                , page: true
                , limit: 10   //默认十条数据一页
                , limits: [10, 20, 30, 50]  //数据分页条
                ,skin:"line"//新增
                ,even:true//新增
                ,done:function () {//新增
                    $(".layui-table-box").css("border-width","0px");
                    $(".layui-table-header tr").css("height","46px");
                    $(".layui-table-header tr").css("background-color","white");
                    $(".layui-table-header tr span").css({"color":"#fd6686","font-size":"16px"});
                }
            });
            //工具栏
            table.on('toolbar(job)', function (obj) {
            var checkStatus = table.checkStatus(obj.config.id);
            switch(obj.event){
                case 'getCheckData':
                    var data = checkStatus.data;
                    var idlist = [];
                    for (i = 0;i<data.length;i++){
                        var id = data[0].job_ID;
                        idlist.push(id.toString());
                    }
                    console.log(idlist);
                    $.ajax({//给后台传数据
                        url:"/unliked",
                        dataType:"json",
                        data:{"job_ID":idlist},
                        success:function (json) {
                            if(json.code==0){
                                layer.alert("成功取消收藏");
                                console.log(json.msg);
                                window.location.reload();//刷新页面,测试的时候可以先把这行注释掉
                            }
                            else {
                                layer.alert("失败!")
                            }
                        }
                    });
                    break;
            }
        });
        //监听行单击事件(双击事件为:rowDouble)
        table.on('row(job)', function(obj){
            var data = obj.data;
            var data = data.job_ID;
            console.log(data);
            window.open("jobdetails?jobid="+data);
        });
    });
});
</script>

后台传数据:

@RequestMapping("/getlist")
@ResponseBody
public String getlist(@RequestParam Map<String,Object> param ,HttpServletRequest request){
    JSONObject jobc = null;
    int page = Integer.parseInt((String)param.get("page"));
    int limit = Integer.parseInt((String) param.get("limit"));

    List<Job> joblist = new ArrayList<Job>();
    for(int i = 0;i<10;i++) {
        Job job = new Job();
        job.setJob_ID((long)11);
        job.setTitle("数据分析员");
        job.setCompany_name("随便");
        job.setCities("济南");
        job.setKeywords("python");
        job.setDdl(new Date());
        job.setContactline("12356789224");
        Job job1 = new Job();
        job1.setJob_ID((long)112);
        job1.setTitle("数据分析员");
        job1.setCompany_name("随便");
        job1.setCities("深圳");
        job1.setKeywords("python");
        job1.setDdl(new Date());
        joblist.add(job);
        joblist.add(job1);
    }
    jobc = new JSONObject();
    int size = joblist.size();
    if (page * limit <= size) {
        joblist = joblist.subList((page - 1) * limit, page * limit);
    } else {
        joblist = joblist.subList((page - 1) * limit, size);
    }
    jobc.put("code", 0);
    jobc.put("count",size);
    jobc.put("data",joblist);
    return jobc.toString();
}

一开始在往后台传数据的时候我犯了一个错误:

Job job = new Job();
job.setJob_ID((long)11);
job.setTitle("数据分析员");
job.setCompany_name("随便");
job.setCities("济南");
job.setKeywords("python");
job.setDdl(new Date());
job.setContactline("12356789224");
Job job1 = new Job();
job1.setJob_ID((long)112);
job1.setTitle("数据分析员");
job1.setCompany_name("随便");
job1.setCities("深圳");
job1.setKeywords("python");
job1.setDdl(new Date());
 for(int i = 0;i<10;i++) {
        joblist.add(job);
        joblist.add(job1);
    }

如代码所见,我new了两个Job对象,然后利用循环反复把这两个对象往joblist里加。结果前端呈现出来的只有前两条数据能完全显示出来,后面都是空;然而条数又是没错的。这个错可把当时的我难倒了。
在这里插入图片描述
显然前端是没有问题的,错误只能是在后端出现了。我试图在浏览器中通过调试来找出问题所在,在network找到获取数据的请求,点开正文一看:
在这里插入图片描述
唉,非常笨的错误,恐怕只有新手才会犯,希望自己以后别再这样犯傻了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值