您的位置:首页 > Web前端 > JQuery

jQuery插件flexigrid改造……

2010-04-10 22:56 501 查看
做毕设用到flexigrid这个插件,但是遇到种种问题!呃,说不太明白,还是用代码说话吧!

后台代码:

private List《RlEmployee》 rows;

这个就是要在前台显示的rows。但是问题是我的RlEmployee是这样的:

private Integer empId;
private RlDepartment rlDepartment;
private RlPosition rlPosition;
private String empUserName;

……略
这里又有两个对象,就是RlDepartment 和RlPosition ,分别代表“部门”和“职位”,也就是我数据库中表之间的关系,这些pojo是用hibernate自动生成的。在数据库中RlEmployee这张表之存了“部门ID”和“职位ID”。这两个POJO如下:

RlDepartment :

private Integer depId;
private String depName;
private Integer parentId;
private String remark;

RlPosition 略。大致差不多。

现在问题是我在前台想输出“部门名称----depName这个属性”。

原本以为在前台 colModel中这么定义即可:{display : "部门", name : "rlDepartment.depName", width : 100, sortable : true}

但是flexigrid根本就不支持这种写法……所以就想通过process里写方法来达到目的,但是失败了……所以就看了下flexigrid的源码。发现只要在tdVal.push(y)之前再进行遍历一遍即可……

讲flexigrid的源代码改了两处:

1.

// 取列名
var seleceName = cm.name;

//在这里加上下句,然后在colModel中加入subname这个属性,表示需要获取的对象中的属性名。
var subName = cm.subname;

2.

// 过滤key
$.each(data.rows[i], function(x, y) {
if (seleceName == x) {

//这里再进行了2次遍历
/**
* 判断y是不是对象,如果是对象就再次进行遍历,在colModel中加入
* 属性subname,表示需要获取的对象中的属性。
*/
if(typeof(y)=='object'){
if(y != null){
$.each(y, function(x, y) {
if(subName == x){
tdVal.push(y);
}
});
}

}else{
tdVal.push(y);
}
}
})

然后再把colModel改为 {display : "部门", name : "rlDepartment",subname:"depName"}

这样一切都搞定!在前台获取到了“部门名称”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: