Layui选项卡Tab和Layui模板laytpl冲突问题

一、介绍

在默认情况下,单元格的内容是完全按照数据接口返回的content原样输出的,如果你想对某列的单元格添加链接等其它元素,你可以借助该参数来轻松实现。这是一个非常实用且强大的功能,你的表格内容会因此而丰富多样。

  • 类型:String,默认值:

templet 提供了三种使用方式,请结合实际场景选择最合适的一种:

  • 如果自定义模版的字符量太大,我们推荐你采用 方式一
  • 如果自定义模板的字符量适中,或者想更方便地调用外部方法,我们推荐你采用 方式二
  • 如果自定义模板的字符量很小,我们推荐你采用 方式三

二、templet - 自定义列模板的 3 种方式

1、方式一:绑定模版选择器。

    table.render({
      cols: [[
        {field:'title', title: '文章标题', width: 200, templet: '#titleTpl'} //这里的templet值是模板元素的选择器
        ,{field:'id', title:'ID', width:100}
      ]]
    });
     
    等价于:
    <th lay-data="{field:'title', width: 200, templet: '#titleTpl'}">文章标题</th>
    <th lay-data="{field:'id', width:100}">ID</th>
  • 下述是templet对应的模板,它可以存放在页面的任意位置。模板遵循于 laytpl 语法,可读取到返回的所有数据
<script type="text/html" id="titleTpl">
  <a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a>
</script>
 
注意:上述的 {{d.id}}、{{d.title}} 是动态内容,它对应数据接口返回的字段名。除此之外,你还可以读取到以下额外字段:
     序号:{{ d.LAY_INDEX }} (该额外字段为 layui 2.2.0 新增)
 
由于模板遵循 laytpl 语法(建议细读 laytpl文档 ),因此在模板中你可以写任意脚本语句(如 if else/for等):
<script type="text/html" id="titleTpl">
  {{#  if(d.id < 100){ }}
    <a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a>
  {{#  } else { }}
    {{d.title}}(普通用户)
  {{#  } }}
</script>

2、函数转义。自 layui 2.2.5 开始,templet 开始支持函数形式,函数返回一个参数 d,包含接口返回的所有字段和数据。如下所示:

table.render({
  cols: [[
    {field:'title', title: '文章标题', width: 200
      ,templet: function(d){
        return 'ID:'+ d.id +',标题:<span style="color: #c00;">'+ d.title +'</span>'
      }
    }
    ,{field:'id', title:'ID', width:100}
  ]]
});    

3、方式三:直接赋值模版字符。事实上,templet 也可以直接是一段 html 内容,如:

templet: '<div><a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a></div>'
 
注意:这里一定要被一层 <div></div> 包裹,否则无法读取到模板

三、第四种方法(解决Layui选项卡Tab和Layui模板laytpl冲突问题)

  • 在使用 选项卡Tabs 时,选项卡 与 laytpl 模板冲突,把 laytpl 模板当成字符串拼接进 我们要写的位置
//表格初始化
table.render({
  elem: '#LAY-user-table'
  ,cols: [[
    {field:'title', title: '文章标题', width: 200}
    ,{field:'id', title:'ID', width:100}
    ,{title: '操作', width: 300, align: 'center', fixed: 'right', toolbar: '#table-user-oper'}
  ]]
});
  • 使用 方式一:绑定模版选择器。
<div class="layui-card-body" id="user-table">
    <table id="LAY-user-Table" lay-filter="LAY-user-Table"></table>
    <script type="text/html" id="table-user-oper">
        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="detail">详情</a>

        {{#  if(d.user_id && d.status == 0) { }}
        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>
        {{#  } }}

        {{#  if(d.close_status == 0) { }}
        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="close">关闭</a>
        {{#  } }}

    </script>

</div>

~~~~~ 分割线:方法 [ 四 ] ~~~~~

  • 如果自定义模板不能正常显示,也没有Js报错,建议采用 方式四
  • 方法四:在Js中拼接laytpl 模板字符串,再append追加到表格元素中
<div class="layui-card-body" id="user-table">
    <table id="LAY-user-Table" lay-filter="LAY-user-Table"></table>
    <!--<script type="text/html" id="table-user-oper">
        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="detail">详情</a>

        {{#  if(d.user_id && d.status == 0) { }}
        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>
        {{#  } }}

        {{#  if(d.close_status == 0) { }}
        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="close">关闭</a>
        {{#  } }}

    </script>-->

</div>
//组装表格每列的操作按钮
let laytplString =
    '<script type="text/html" id="table-user-oper">\
        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="detail">详情</a>\
        \
        {{#  if(d.user_id && d.status == 0) { }}\
        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>\
        {{#  } }}\
        \
        {{#  if(d.close_status == 0) { }}\
            <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="close">关闭</a>\
        {{#  } }}\
        \
    <\/script>';

$('#user-table').append(laytplString);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值