jQuery插件flexigrid改造……

    做毕设用到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"}

 

这样一切都搞定!在前台获取到了“部门名称”。

 

你可能感兴趣的:(jQuery插件flexigrid改造……)