zoukankan      html  css  js  c++  java
  • 插件 DataTable 创建列表 render参数的详解与如何传递本行数据id

    1、首先 导入DataTable 的插件

    2、定义表结构:

    HTML: 

      <table>  

        <thead>

          <tr>

            <th>id</th>

            <th>任务名称</th>

            <th>状态</th>

          </tr>

        </thead>

        <tbody>

        </tbody>

      </table>

    JS:

      var myparas = "?stime="+GetIt["stime"]+"&etime="+GetIt["etime"]+"&which="+GetIt["which"]+"&due="+GetIt["due"];

      var table = $("datatable-buttonss").DataTable({

        "lengthMenu": [16, 32, 48],   // 定义每页展示数据数量

        "aaSorting": [[ 2, "desc" ]],   // 初始化根据第3列降序排列

        "searching": true,  //全文搜索

        "bPaginate": true,   //翻页功能

        "bInfo": true,  //页脚信息

        "bAutoWidth": false,//自动宽度

        "bProcessing": true,  //DataTables载入数据时,是否显示‘进度’提示

        ajax:"/task_mgm/taskDataMine2" + myparas,     // ajaxs向后台请求数据

        "columnDefs":[                                                     // 自定义列功能

        {       

          "targets": [ 0 ],   //目标列

                "Sorting": false,  // 是否支持排序

           "width": "5%",   // 列宽

           "visible": false,   // 列不可见

        },

        {

          "targets": [ 1 ],

          "Sorting": false,

          "render": function ( data, type, row, meta )   // data:表格数据 row:该行所有数据 数组形式 所以 data==row[1]

              {return type === 'display' && data.length > 20?'<span title="'+data+'">'+data.substr( 0, 16 )+'...</span>' :data;}

        }, // 给长字符串加省略号

        {

            "targets": [ 2 ],

         "width": "28%",

          "orderable": false,
      "defaultContent": '<i class="fa fa-edit" id="edit">编辑</i>&nbsp;<i class="fa fa-times" id="delete">删除</i>&nbsp;<i class="fa fa-star-o" id="focus">关注</i>&nbsp;<i class="fa fa-share-square-o" id="share">分享</i>',
      "render": function (data, type, full) {
         if(data == 0){return '<i class="fa fa-edit" id="edit">编辑</i>&nbsp;<i class="fa fa-times" id="delete">删除</i>&nbsp;<i class="fa fa-star-o" id="focus">关注</i>&nbsp;<i class="fa fa-share-square-o" id="share">分享</i>';}
         else {return '<i class="fa fa-edit" id="edit">编辑</i>&nbsp;<i class="fa fa-times" id="delete">删除</i>&nbsp;<i class="fa fa-star" id="focus">已关注</i>&nbsp;<i class="fa fa-share-square-o" id="share">分享</i>';}
    }
    },

        ]

    }) 

    <script>

      // 获取任务id 来编辑任务的 两种方式:

      $(function){

      //  1) 通过 编辑按钮 编辑任务

        $("#datatable-buttonss tbody").on('click', '#edit', function () {

          var data = table.row($(this).parents('tr')).data();  //获取本行数据  数组形式
      window.location.href='/task_mgm/taskinfo_editID='+data[0]; // data[0] 第一列数据 即后端传来的任务id
    });
        
      
    // 2) 通过 点击任务名 通过a标签链接编辑任务    
    {
    "targets": [ 1 ],
    "sorting": false,
    "render": function(data, type, full) { // full 以数组形式存放本行数据 full[0]:任务id full[1]:任务名
    return '<a id="shareInfo" href="/task_mgm/taskinfo_editID='+full[0]+'">'+ full[1] +'</a>'}
     // 3) 通过1,2方法的组合  即点击任务名 触发事件
    {
    "targets": [ 1 ],
    "sorting": false,
    "render": function(data, type, full) { // full 以数组形式存放本行数据 full[0]:任务id full[1]:任务名
    return '<a id="shareInfo" href="#'">'+ full[1] +'</a>'
    }
    $("#datatable-buttonss tbody").on('click', '#shareInfo', function () {
            var data = table.row($(this).parents('tr')).data();
    window.location.href="/task_mgm/taskinfo_editID="+data[0];
    });
     

    }

    </script>

    后端flask:

      返回的数据格式:['data':  [ [0, '第一个任务',0], [1, ‘第二个任务’, 0], [2,‘第三个任务’,1]] ]

      所以要用工具函数构造此数据, 然后调用该函数返回数据:

    def sql3json(objs, fields):  # objs是查询的数据库对象tasks  fields是包含该对象表结构的列属性的列表['id', 'taskName', 'ifFocus']
        tabledata = {"data": []}
        for obj in objs:
            row = [None]*len(fields)
            for field in [x for x in dir(obj) if x in fields]:
                if field == 'urgentId':
                    data = obj.urgence.urgentName
                else:
                    data = obj.__getattribute__(field)
                    if data is None:
                        data = ''
                    if data is False:
                        data = 0
                    if data is True:
                        data = 1
                    if isinstance(data, datetime.datetime):
                        data = data.strftime('%Y-%m-%d %H:%M')
                        if data == '2099-01-01':
                            data = '时间未定'
                row[fields.index(field)] = data
            tabledata["data"].append(row)
        tabledata = repr(tabledata).replace("'", """)  # 输出字符串形式,且以“”作为字符串的头尾
        return tabledata

    # 我的任务数据
    @task_mgm.route('/taskDataMine', methods=['GET', 'POST'])
    @sso_wrapper
    def taskinfo_dataMine_fun():
    # 应该根据用户名或ID 的到自己的任务 现在先暂时应任务ID
    tasks = Task.query.filter(and_(Task.isDelete != 1, Task.endState != 1)).order_by(Task.urgentGrade.desc()).all()
    data = sql3json(tasks, ["id", "taskName", "ifFocus"])
    data = data.replace("None", "" "")
    return data

      

      

  • 相关阅读:
    javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码
    windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况
    javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url
    ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
    HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
    Servlet主要相关类核心类 容器调用的过程浅析 servlet解读 怎么调用 Servlet是什么 工作机制
    linq查询语句转mongodb
    winddows rabbitmq安装与配置
    Redis For Windows安装及密码
    出现,视图必须派生自 WebViewPage 或 WebViewPage错误解决方法
  • 原文地址:https://www.cnblogs.com/We612/p/10143584.html
Copyright © 2011-2022 走看看