通常,我们以templet: ratio参数作为Layui的数据表格模板,再对ratio进行定义,即可实现。
我们只需要做一些简单的返回,比如state判断,0输出一个button,1输出另一个button。
需求
在实际开发过程中,我遇到一个需要使用通用模板返回不同数据的需求。
即所有列都定义一个相同的templet名称,通过获取layui当前列名称和所在单元格数据,经过一定的逻辑处理,返回相应的数据。
获取列名称
我们定义模板时会做这样的定义:
1 |
var ratio = function (d) |
其中d就是当前行的数据。
如果要获取列名称,可以用:
1 |
var field = this.field; |
通过控制台即可打印列名称:
1 |
console.log(this.field); |
获取单元格的值
正常情况下,我们直接用d.state,就能获取到指定单元格的值。
现在,我们的state成了一个变量,即当前列的名称,this.field。
那么,我们已经有var field,是否可以d.field来表达当前行指定列的值呢?
不可以的,因为d是一个对象,默认情况下d.field表达式直接去取d对象的field属性值。
更换表达式
对象的取值,除了d.state的形式外,还有d[‘state’]形式,我们尝试更换表达式:
1 |
var thisData = d[field]; |
即可将field作为“变量”传递进去。
最终代码
1 2 3 4 5 6 7 8 9 10 11 12 |
var ratio = function (d) { var field = this.field; var thisData = d[field]; var returnArray = []; console.log(this.field); console.log(thisData); Object.keys(thisData).forEach(function (key) { console.log(thisData[key]); returnArray += (thisData[key])+'% '; }); return returnArray; }; |
如上,即可用一个公共模板完成工作,同理,通过拓展可以实现更多功能。
原创文章,作者:蓝洛水深,如若转载,请注明出处:https://blog.lanluo.cn/10428