道家有云:授之于鱼不如授之于渔,授人以鱼只救一时之急,授人以渔则可解一生之需。
基于这个出发点,《layui 从鱼到渔》的系列教程正式启动,我将结合大家的日常所需,不定期分享 layui 的“捕鱼”之道,算是对文档的补充,后续也将收录在案。为了能快速阅读,篇幅都不会太长。
而你是否原意成为一枚渔人,而非吃鱼的路人,全由你自己了。
首先带来的,是关于 table 模块中的自定义模板的分享。很多时候,table 并不想单调地呈现数据库存储的值,这时候就需要用到自定义模板的功能,layui 的文档也有相关介绍:table 自定义列模板。但这项功能由于涉及到 laytpl 语法,所以往往被许多人忽略。而今天我希望通过一个简单的例子:时间戳转换为日期字符,来引导大家勇敢去使用。
一. 编写公共方法,这里以赋值到 laytpl 对象为例
//时间戳的处理 layui.laytpl.toDateString = function(d, format){ var date = new Date(d || new Date()) ,ymd = [ this.digit(date.getFullYear(), 4) ,this.digit(date.getMonth() + 1) ,this.digit(date.getDate()) ] ,hms = [ this.digit(date.getHours()) ,this.digit(date.getMinutes()) ,this.digit(date.getSeconds()) ]; format = format || 'yyyy-MM-dd HH:mm:ss'; return format.replace(/yyyy/g, ymd[0]) .replace(/MM/g, ymd[1]) .replace(/dd/g, ymd[2]) .replace(/HH/g, hms[0]) .replace(/mm/g, hms[1]) .replace(/ss/g, hms[2]); }; //数字前置补零 layui.laytpl.digit = function(num, length, end){ var str = ''; num = String(num); length = length || 2; for(var i = num.length; i < length; i++){ str += '0'; } return num < Math.pow(10, length) ? str + (num|0) : num; };
讲解:
1) 之所以将方法暴露给 laytpl 对象,是便于模板能读取到,因为 laytpl 模板是在一个封闭的函数作用域中进行解析的,它只能读取到模板内的方法/属性和全局方法/属性。
2) layui.laytpl.toDateString(d, format) 方法接受两个参数。其中 d 可以是日期对象,也可以是毫秒数。format 是日期字符的格式,你可以随意定义,如:yyyy年MM月dd日
二. 在列模板中调用时间戳的处理方法
table.render({ //其它参数在此省略 elem: '#demo' ,cols: [[ {field: 'createTime', title: '创建时间', templet: '<div>{{ layui.laytpl.toDateString(d.time) }}</div>'} ]] });
讲解:
d.time 中的 time 即是你接口返回的字段,如果是 unix 时间戳,这里记得要 d.time*1000,如果是毫秒数,这里直接传 d.time 即可。
本篇也只是抛砖引玉,业务中更多丰富的呈现,还需要你自行发散。