一、
表头的生成
1. 通过ajax从后台获取数据
函数 |
介绍 |
init 函数 |
初始化,通过ajax获取后台数据参数 |
initHeader |
生成table头 |
initBody |
生成table内容 |
initGlobalData |
为了处理跨表的数据,生成一个在js全局的数据,格式{"对应配置文件的@@":[[],[]]}
|
function init() {
$.ajax(
{
url:'/asset-json.html/',
type:'GET',
dataType:'JSON',
success:function (resutlt) {
initGlobalData(resutlt.global_list)
initHeader(resutlt.table_config);
initBody(resutlt.table_config,resutlt.data_list);
}
}
)
}
1. 编写table头函数initHeader()
resutlt.table_config |
数据格式 |
后台配置文件的列表里面title封装了表头 |
[{ 'title':'ID'}] |
可扩展加编号title
思路利用document.createElement
生成tr,th标签,通过循环列数来生成table头
function initHeader(table_config) {
var tr = document.createElement('tr')
$.each(table_config,function (k,item) {
if(item.display) {
var th = document.createElement('th')
th.innerHTML = item.title;
$(tr).append(th)
}
})
$('#table_th').empty()
$('#table_th').append(tr)
}
表内容的生成
1. 编写table内容函数initBody()函数生成表格内容
参数 |
参数介绍 |
参数格式 |
resutlt.table_config |
表格的列 |
格式详见配置列表 |
resutlt.data_list |
表格的行 |
格式通过model.values查出来的类似字典的格式,k代表着字段,v代表字段值,循环个数就是列表的行 |
可扩展加编号title
思路利用document.createElement
生成tr,th标签,通过循环列数来生成table头
表格的展示形式行*列双层循环
function initBody(table_config,data_list) {
$('#table_td').empty();
/** data_list 是数据库查回的数据,有多少条就有多少行 **/
for(var i=0; i<data_list.length; i++){
var row = data_list[i]
var tr = document.createElement('tr')
//给tr 设置属性,吧当前数据库中的id放到tr中
tr.setAttribute('row-id',row['id'])
/** table_config 是标题标题管的是多少列 **/
$.each(table_config,function (k,colConfig) {
if(colConfig.display) {
//colConfig.text.content = "{m}-{n}"为格式化的字符串
//colConfig.text.kwargs = "{'n':"机柜",'m':"xx`"}"替换的格式内容
//自定义string方法
//封装了字符串的所有方法
var td = document.createElement('td')
kwargs = {}
$.each(colConfig.text.kwargs,function (k,v) {
if(v.substring(0,2) == "@@"){
var globalName = v.substring(2,v.length);
var currentId = row[colConfig.q];
var t = getTextFromGlobalById(globalName,currentId);
kwargs[k] = t
}
else if (v[0] == "@"){
kwargs[k] = row[v.substring(1,v.length)]
}else{
kwargs[k] = v
}
});
var temp = colConfig.text.content.format(kwargs)
/** q保存数据库的字段等同于数据库查出的k **/
//null 在这修改
td.innerHTML = temp
//设置属性
$.each(colConfig.attrs,function (kk,vv) {
if(vv[0] == "@"){
//生成下拉框value
td.setAttribute(kk,row[vv.substring(1,vv.length)])
}else{
td.setAttribute(kk,vv)
}
})
$(tr).append(td);
}
});
$('#table_td').append(tr)
}
}
2.编写表内容中的js string自定义的方法
js重写参数 |
参数介绍 |
String.prototype 自定义方法 |
函数中this参数等价于当前调用的字符串 |
下面的案例打印出来的是sss测试
String.prototype.text= function (kwargs) {
return "sss"+this
}
alert("测试".text())
编写一个用来替换自定义差价格式的转换js,替换的格式{n}-{m},替换的内容在view定义好,这里使用了和字段同名的命名方式,为了保证可以替换数据查出来的信息
String.prototype.format=function (kwargs) {
//用正则匹配要替换的内容
var ret = this.replace(/\{(\w+)\}/g,function(km,m){
//return 会替换完后返回替换后的值,m是正则匹配的占位符
//return 通过字典里面的k替换掉,被替换的字符串
return kwargs[m];
});
return ret;
};
3.编写用来封装的跨表查询数据
globalName |
currentId |
全局变量的名字也就是@@后面的字段 |
当前@@查出来的列表中第一位置的值 |
function getTextFromGlobalById(globalName,currentId){
$.each(globalName,function (k,item) {
if(item[0]==currentId){
ret = item[1]
return
}
});
return ret
}
网友评论