/**
* 针对table进行数据绑定,绑定方式
*
table的定义 参数的传递 data-value
data-value: id为需绑定数据的编号 若需要跳转界面 url:界面路径 location:界面覆盖位置 若需要checkbox则添加check标签 若有xh标签则添加序号显示
formatter用于替换显示值
styleName用于绑定样式这里是class的样式 有的列,如下载需要绑定一个图片,此时可以利用样式完成
text为绑定的值 有的列需要绑定固定的值,比如“详情”
<table id="TCustomer" class="TCustomer" cellspacing="0">
<thead>
<tr>
<th style="width:20px" data-value={'xh':true}></th>
<th style="width:40px" data-value="{'control':'checkbox'}">
<input type="checkbox"/>
</th>
<th data-value="{'id':'company_name','url':'../iCore.Mmp.Pt.Web.Oms/CustomerInformation/CustomerDetails.html','location':'.TheCustomer','clickEvent':'TheCustomer.clickShow(this)'}">企业名称</th>
<th data-value="{'id':'corporation_man','display':'none'}">法人代表</th>
<th data-value="{'id':'corporation_man','formatter':[{'idField':'4','valueField':'状态2'},{'idField':'1','valueField':'状态1'}]}">法人代表</th>
<th data-value="{'styleName':'tbdownload','text':'测试','clickEvent':'tbfile.downLoad(this)'}" style="width: 40px;text-align:left;">下载</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
var tbColumn = new Array();
$("#TCustomer > thead > tr > th").each(function(){
tbColumn.push(eval("("+$(this).attr("data-value")+")"));
});
①非分页方式
//table id:TCustomer table column:tbColumn 绑定的数据:datas
CreateTb.WriteTb("#TCustomer",tbColumn,datas);
②分页方式
CreateTb.WriteTb("#TCustomer",tbColumn,datas,"#customerpagination");
数据获取方式
CreateTb.getClickRowDb("#TCustomer");
若存在覆盖页则父界面的数据传递给子界面的时候会写到 parantParam 参数中
具体可看Home.js中的PageJump函数
function PageJump(Url,MId,params){
if(Url) {
$.ajax({
url: Url,
type: "post",
dataType: 'html',
success: function (data) {
var paramDb="";
if(params){
paramDb="<script>var parantParam="+JSON.stringify(params)+"; </script>";
}
if(MId){
$(MId).html(paramDb+data);
}
else{
$(".section-right").html(paramDb+data);
}
}
});
}
}
比如下面 param 其实是点击的那个html节点
function clickShow(param){
HomePage.PageJump($(param).attr("data-url"), $(param).attr("data-location"),CreateTb.getRowDb("#TCustomer",param));
}
在子界面中用 parantParam即可获取到父界面传递过来的参数
* */
var CreateTb=function(){
function WriteTb(tbId,tbColumns,data,PgId){
var dbCount=0;
var isRows=false;
var dbTotal=0;
if(data){
if(data.rows){
dbCount=data.rows.length;
isRows=true;
if(data.total){
dbTotal=data.total;
}
}else{
dbCount=data.length;
}
}
//可以不在界面构造,tbColumns传一个null过来即可
var tbColumn = new Array();
if(!tbColumns){
$(tbId+" > thead > tr > th").each(function(){
tbColumn.push(eval("("+$(this).attr("data-value")+")"));
});
}else{
tbColumn=tbColumns;
}
var htmlStr="";
for(var j=0;j<dbCount;j++) {//循环数据
htmlStr+="<tr>";
for (var i = 0; i < tbColumn.length; i++) {//循环头部
if(tbColumn[i].control){
//写入checkbox
htmlStr+="<td><input class='checked' type='"+tbColumn[i].control+"'/></td>\n";
}else if(tbColumn[i].xh){
//写入序号列
htmlStr+="<td>"+(j+1)+"</td>\n";
}else{
//写入值
var dbtxt="";
//用于点击跳转
if(isRows){
if(data.rows[j][tbColumn[i].id]!=undefined&&data.rows[j][tbColumn[i].id]!=null){
//'formatter':[{'idField':'0','valueField':'状态0'},{'idField':'1','valueField':'状态1'}]
var formatter=tbColumn[i].formatter;
if(formatter){
for(var k=0;k<formatter.length;k++){
if(data.rows[j][tbColumn[i].id]==formatter[k].idField){
dbtxt=formatter[k].valueField;
break;
}
}
}else{
dbtxt=data.rows[j][tbColumn[i].id];
}
}
//用于显示隐藏,默认显示
if(tbColumn[i].display){
htmlStr+="<td style='display:"+tbColumn[i].display+"'>";
}else{
htmlStr+="<td>";
}
if(tbColumn[i].clickEvent||tbColumn[i].clickDivEvent||tbColumn[i].url||tbColumn[i].location||tbColumn[i].styleName||tbColumn[i].text){
//HomePage.PageJump($(this).attr(\"data-url\"),\""+tbColumn[i].location+"\",CreateTb.getRowDb(\""+tbId+"\",this))
//从rows中获取值匹配则构造写入,否则构造空
//必须有绑定事件才能跳转
if(tbColumn[i].clickDivEvent){
htmlStr+="<div style='width:100%' οnclick='"+tbColumn[i].clickDivEvent+"' ";
}else{
htmlStr+="<span ";
}
if(tbColumn[i].clickEvent||tbColumn[i].clickDivEvent){
htmlStr+=" οnclick='"+tbColumn[i].clickEvent+"' ";
}
if(tbColumn[i].url){
htmlStr+=" data-url='"+tbColumn[i].url+"' ";
}
if(tbColumn[i].location){
htmlStr+=" data-location='"+tbColumn[i].location+"' ";
}
if(tbColumn[i].styleName){
htmlStr+=" class='"+tbColumn[i].styleName+"'";
}
if(tbColumn[i].text){
dbtxt+=tbColumn[i].text;
}
if(tbColumn[i].clickDivEvent){
htmlStr+=">"+(dbtxt?dbtxt:0)+"</div>";
}else{
htmlStr+=">"+dbtxt+"</span>";
}
}else{
htmlStr+=dbtxt;
}
htmlStr+="</td>\n";
}else{
if(data[j][tbColumn[i].id]!=undefined&&data[j][tbColumn[i].id]!=null){
//'formatter':[{'idField':'0','valueField':'状态0'},{'idField':'1','valueField':'状态1'}]
var formatter=tbColumn[i].formatter;
if(formatter){
for(var k=0;k<formatter.length;k++){
if(data[j][tbColumn[i].id]==formatter[k].idField){
dbtxt=formatter[k].valueField;
break;
}
}
}else{
dbtxt=data[j][tbColumn[i].id];
}
}
//用于显示隐藏,默认显示
if(tbColumn[i].display){
htmlStr+="<td style='display:"+tbColumn[i].display+"'>";
}else{
htmlStr+="<td>";
}
if(tbColumn[i].clickEvent||tbColumn[i].clickDivEvent||tbColumn[i].url||tbColumn[i].location||tbColumn[i].styleName||tbColumn[i].text){
if(tbColumn[i].clickDivEvent){
htmlStr+="<div style='width:100%' οnclick='"+tbColumn[i].clickDivEvent+"' ";
}else{
htmlStr+="<span ";
}
if(tbColumn[i].clickEvent){
htmlStr+=" οnclick='"+tbColumn[i].clickEvent+"' ";
}
if(tbColumn[i].url){
htmlStr+=" data-url='"+tbColumn[i].url+"' ";
}
if(tbColumn[i].location){
htmlStr+=" data-location='"+tbColumn[i].location+"' ";
}
if(tbColumn[i].styleName){
htmlStr+=" class='"+tbColumn[i].styleName+"'";
}
if(tbColumn[i].text){
dbtxt+=tbColumn[i].text;
}
if(tbColumn[i].clickDivEvent){
//htmlStr+=">"+(dbtxt?dbtxt:"0")+"</div>";
htmlStr+=">"+(dbtxt?dbtxt:0)+"</div>";
}else{
htmlStr+=">"+dbtxt+"</span>";
}
}else{
htmlStr+=dbtxt;
}
htmlStr+="</td>\n";
}
}
}
htmlStr+="</tr>\n";
}
$(tbId).children("tbody").html(htmlStr);
if(PgId){
$(PgId).pagination('refresh',{ // 改变选项并刷新分页栏信息
total: dbTotal
});
}
tbCheck(tbId)
}
function tbCheck(tbId){
$(tbId+" thead input[type='checkbox']").click(function(){
if($(this).prop("checked")){
$(tbId+" tbody input[type='checkbox']").prop({"checked":true});
}else{
$(tbId+" tbody input[type='checkbox']").prop({"checked":false});
}
});
$(tbId+" tbody tr").on("click",function(){
$(tbId+" tbody tr").css({"background-color":"#FFF"});
$(tbId+" tbody tr").removeAttr("data-check");
$(this).css({"background-color":"#E9F7F6"});
$(this).attr("data-check","checked");
$(tbId+" tbody input[type='checkbox']").prop({"checked":false});
$(this).children("td").each(function(){
var ck = $(this).children("input[type='checkbox']");
if(ck){
ck.prop({"checked":true});
}
});
});
}
//获取点击行数据
function getClickRowDb(tbId){
var dbColumn=[];
$(tbId+" thead th").each(function(){
var dbId=eval("("+$(this).attr("data-value")+")");
if(dbId&&dbId.id){
if(dbId.id){
dbColumn.push(dbId);
}else{
dbColumn.push("null");
}
}else{
dbColumn.push("null");
}
});
var rowDbStr="";
var i=0;
$(tbId+" tbody tr[data-check='checked']").children("td").each(function(db){
if(dbColumn[i]!="null"){
if(dbColumn[i].formatter){
for(var k=0;k<dbColumn[i].formatter.length;k++){
if($(this).text()==dbColumn[i].formatter[k].valueField){
rowDbStr+="\""+dbColumn[i].id+"\":\""+dbColumn[i].formatter[k].idField+"\","
break;
}
}
}else{
rowDbStr+="\""+dbColumn[i].id+"\":\""+$(this).text().replace(/(\r\n)|(\n)/g,"\\n\\r")+"\","
}
}
i++;
});
if(rowDbStr.length>0){
rowDbStr=rowDbStr.substring(0, rowDbStr.length-1)+"}";
rowDbStr="{"+rowDbStr;
return JSON.parse(rowDbStr);
}else{
return [];
}
}
//获取某一行的数据 indexNum为第N行
function getIndexRowDb(tbId,indexNum){
var dbColumn=[];
var rowDbStr="";
var i=0;
$(tbId+" thead th").each(function(){
var dbId=eval("("+$(this).attr("data-value")+")");
if(dbId&&dbId.id){
if(dbId.id){
dbColumn.push(dbId);
}else{
dbColumn.push("null");
}
}else{
dbColumn.push("null");
}
});
$(tbId+" tbody tr:eq("+indexNum+") >td").each(function(){
if(dbColumn[i]!="null"){
if(dbColumn[i].formatter){
for(var k=0;k<dbColumn[i].formatter.length;k++){
if($(this).text()==dbColumn[i].formatter[k].valueField){
rowDbStr+="\""+dbColumn[i].id+"\":\""+dbColumn[i].formatter[k].idField+"\","
break;
}
}
}else{
//针对带斜杠的数据如路径
rowDbStr+="\""+dbColumn[i].id+"\":\""+$(this).text().replace(/(\r\n)|(\n)/g,"\\n\\r")+"\","
}
}
i++;
});
if(rowDbStr.length>0){
rowDbStr=rowDbStr.substring(0, rowDbStr.length-1)+"}";
rowDbStr="{"+rowDbStr;
return JSON.parse(rowDbStr);
}else{
return [];
}
}
function getRowDb(tbId,param){
var dbColumn=[];
$(tbId+" thead th").each(function(){
var dbId=eval("("+$(this).attr("data-value")+")");
if(dbId&&dbId.id){
if(dbId.id){
dbColumn.push(dbId);
}else{
dbColumn.push("null");
}
}else{
dbColumn.push("null");
}
});
var i=0;
var rowDbStr="";
//td下有span链接情况
if($(param).parent().parent().children("td")){
$(param).parent().parent().children("td").each(function(){
if(dbColumn[i]!="null"){
if(dbColumn[i].formatter){
for(var k=0;k<dbColumn[i].formatter.length;k++){
if($(this).text()==dbColumn[i].formatter[k].valueField){
rowDbStr+="\""+dbColumn[i].id+"\":\""+dbColumn[i].formatter[k].idField+"\","
break;
}
}
}else{
rowDbStr+="\""+dbColumn[i].id+"\":\""+$(this).text().replace(/(\r\n)|(\n)/g,"\\n\\r")+"\","
}
}
i++;
});
}else if($(param).parent().children("td")){//td下直接点击数据
$(param).parent().children("td").each(function(){
var bflag=false;
if(dbColumn[i]!="null"){
if(dbColumn[i].formatter){
for(var k=0;k<formatter.length;k++){
if($(this).text()==dbColumn[i].formatter[k].valueField){
rowDbStr+="\""+dbColumn[i].id+"\":\""+dbColumn[i].formatter[k].idField+"\","
break;
}
}
}else{
rowDbStr+="\""+dbColumn[i].id+"\":\""+$(this).text().replace(/(\r\n)|(\n)/g,"\\n\\r")+"\","
}
}
i++;
});
}
if(rowDbStr.length>0){
rowDbStr=rowDbStr.substring(0, rowDbStr.length-1)+"}";
rowDbStr="{"+rowDbStr;
return JSON.parse(rowDbStr);
}else{
return [];
}
}
return {
WriteTb: WriteTb,
tbCheck:tbCheck,
getClickRowDb:getClickRowDb,
getRowDb:getRowDb,
getIndexRowDb:getIndexRowDb
};
}();
jQuery EasyUI table表单的数据绑定与交互
最新推荐文章于 2023-05-03 16:51:18 发布