好久没写博,连QQ空间都不逛,都快没激情了,偶尔会记一些工作笔记和札记,也只是局限QQ空间,今天忙了一天,总算把基本的框架搭的差不多了,在自己博屋把工作中遇到的一些问题记录下来。
easyUI还是蛮不错的,界面的渲染,参数的绑定,语法的拓展都是比较完美。也有中文的API。
一些细节上的修改在jquery.easyui.min.js里可以找到,并自己修改(当然,必须你有非常的耐心和细心),后面我会整理一些有关tree的用法和拓展,基础类的在自带的document里有、。
言归正传,用easyUI的话,这么丰富的绑定,必定会用到动态列绑定,每个页面查询的列和属性都不同,我开始是想在源码里改源码调,后来发现,实在太难了~官网里没有详细的介绍,网上也不是很全,
先说下我的思路(不愿画图,将就吧),首先通过ajax请求获得你所需要展示的数据,返回一个json,先不急着把数据填充进datagrid,把框架模版初始化,然后再通过datagrid的loadData方式填充(具体查api),然后再渲染剩下的。
//$.ajax 先异步拿到数据 $.getJSON(param.action+'?id='+param.id+'&t='+Math.random(),function(data){ var _peConfig = data.peConfig; //这个是列的属性,如果你也需要动态的话 $("#mainTable").datagrid({ iconCls:'icon-save', nowrap: false, striped: true, collapsible:true, // url:param.action+'?id='+param.id+'&t='+Math.random(), onLoadSuccess:function(data){ }, loadMsg:"正在载入...", sortName: _peConfig.sortName, sortOrder: _peConfig.sortOrder, remoteSort: false, idField:_peConfig.idField, frozenColumns:[[ {field:'ck',checkbox:_peConfig.checkable}, {title:_peConfig.title,field:_peConfig.field,width:80,sortable:_peConfig.sortable} ]], columns:[[ ]], pagination:true, rownumbers:true, }); var p = $('#mainTable').datagrid('getPager'); if (p){ $(p).pagination({ onBeforeRefresh:function(){ $(this).pagination('loading'); } }); } //填充数据 $("#mainTable").datagrid({columns:new Array(data.columns)}).datagrid("loadData",data.records); $('#mainTable').datagrid('getPager').pagination({displayMsg:'当前显示从{from}到{to}共{total}记录'}); });
下面是java代码,
Map recordsMap = new HashMap(); List columnsList = new ArrayList(); recordsMap.put("total", list.size()); recordsMap.put("rows", list);//list是显示数据 columnsList.add(new PageElementConfig("公司名称","companyName","center",true,null,null,null)); columnsList.add(new PageElementConfig("公司地址","companyAddr","center",true,null,null,null)); columnsList.add(new PageElementConfig("公司负责人","companyContact","center",true,null,null,null)); map.put("records", recordsMap); map.put("columns", columnsList); map.put("peConfig", new PageElementConfig("公司ID","companyId","companyId","companyId","desc",true));
前台用到的参数
public class PageElementConfig{ private Integer rowspan; //并行 private Integer colspan; //并列 private boolean sortable; //是否排序 private boolean checkbox; //是否为多选 private String width; //宽度 private String align; //对齐方式 private String title; //列显示文本 private String field; //对应变量 private String sortName; //固定列变量 private String sortOrder; //desc or asc private String idField; //主键
我看到struts源码的时候发现这样的语法,
List extensions = new ArrayList() {{ add("action");}};
其中add方法是ArrayList自带的,
而在java1.6中,
List list = new ArrayList(){{new ColumnsPage("testName")}}; 这样是没有用的,list还是空
我不明白这样的初始化的原因,和初始化之后,extensions 指向的对象个什么状态?
我知道ArrayList其实在维护一个数组,那这个初始化方式产生了几个数组?
后来测试发现,ArrayList是一个类,如果这样写:
ArrayList list=new ArrayList(){{add("action");}};
ArrayList作为匿名的内部类生成一个实例,把引用赋给list
{add("action");}作为这个内部类的初始化代码块而 存在的
Comments | NOTHING