作为一个刚刚毕业入门的菜鸟,在我参与的第一真实的商业项目中,遇到了不少的困难,特别是前端的框架。在我的第一个真实商业项目中,前端框架主要用easyui,在这几天的使用中,用到了几个datagrid单元格格式化的方法,在此做一下记录,慢慢积累,也希望能帮到刚刚入门的小伙伴们。
具体问题是这样的,当多个表关联的时候,我们要在datagrid中显示主表,而要显示的主表引用了另外一个表的id,这个时候datagrid中显示出来的就是另外一个表的id,而我们要的是把另外一个表的记录的name显示出来,这个时候formatter就派上用场了。具体来看看代码:
<t:dgCol title="业务名称" field="targetName" width="120" ></t:dgCol>
<t:dgCol title="业务周期" field="targetCycle" width="60"></t:dgCol>
<t:dgCol title="业务来源" field="departId" width="150" customFormatter="findDepartNameById" ></t:dgCol>
//自定义的formatter函数
function findDepartNameById(value,rec,index){
var departName="";
$.ajax({
async:false,
type: "POST",
dataType: "json",
url: "${module}${name}Controller.html?findDepartNameById&id="+value,
success: function(data){
if(data.success==true){
DepartName=data.obj;
}
}
});
return '<span title="">'+departName+'</span>';
}
上面的findDepartNameById函数写在<script>中,需要注意的是此方法有三个参数,分别是value、rec、index。
value代表了当前行当前单元格里的值,在这里代表的是当前行的departid这个字段的值。
rec代表这个行,如果我们把这个行的内容看成一个对象的话,那么rec.字段 就能获得字段的值,如rec.targetName。
index代表了当前行的行号,这个不用多说。
在这个函数中我们通过主表中存储的departid去把数据查出来,当datagrid加载数据的时候,会逐行替换掉departid的值显示为departName的值。
在去查找数据的过程中特别要注意ajax方法里的async属性设置,一定要设置为false,(同步),也就是当datagrid加载一行数据的时候ajax函数请求一次,这个才能保证departid被正确替换掉。当然若果datagrid要加载的行数比较多的话,对性能可能会有一定影响。