前言
最近在做一个项目,后台管理系统的页面用的ExtJS,具体它是什么,或者含义什么的,百度一下就OK了。至于它的优点,这个虽然用的时间不长,但是体会还是挺深的。它用起来很方便是毋庸置疑的,否则为什么不用原生JS呢。具体方便到哪种程度,请看下面的内容。
DataGrid
说起来用ExtJS做DataGrid,得先看看这个表格的组成部分。DataGrid基本上由表格名称、表格操作按钮、表格内容、表格分页栏四部分组成。表格名称好说,就是这个表格叫什么,指明它是显示什么信息的。表格操作按钮,是对表格内容进行增删改查的,另外可能还加上查询条件。表格内容又分为两部分,一部分是表头,表示这一列名称;一部分是数据,也就是每一列的内容。分页栏表示,如果表格内容是分页的,则会显示第一页、最后一页、上一页、下一页和当前页等内容。
ExtJS实现
上面说把DataGrid分为了几个部分,那么也就是把DataGrid这一个大的对象,拆分成了几个小的对象。ExtJS实现DataGrid就是这个意思,它很好的体现了面向对象的思想,将控件分为几个小对象,定义每一个对象,设置他们相应的属性,然后组合起来,这不是面向对象是什么?而且它很完美的支持了组件的拆卸和重组,实现了组建的复用,这也是使用方便的一个很好体现。
说那么多也没办法真实体现,下面就来看看代码:
1、定义每一类的属性,用于绑定数据库数据,可以看到里面有一个mapping属性,这个就是用于绑定这一列要显示哪一个字段的数据的。
//定义每一列字段属性
var gridPlant = Ext.data.Record.create([
{name:'SID',mapping:'SID',type:'string',hidden:'true'},
{name:'SNAME',mapping:'SNAME',type:'string'},
{name:'PHONENUM',mapping:'PHONENUM',type:'string'},
{name:'POST',mapping:'POST',type:'string'},
{name:'SLEVEL',mapping:'SLEVEL',type:'string'},
{name:'SUNIT',mapping:'SUNIT',type:'string'},
{name:'SCOUNTY',mapping:'SCOUNTY',type:'string'},
{name:'STOWN',mapping:'STOWN',type:'string'},
{name:'SVILLAGE',mapping:'SVILLAGE',type:'string'},
{name:'SREGIOONCODE',mapping:'SREGIOONCODE',type:'string'},
]);
2、定义表格最左边的复选框,如果不需要就不加。
var sm = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([
sm,
{
header:'员工编号',
id:'SID',
dataIndex:'SID',
width:200,
sortable:false;
hideable:false,
menuDisabled:true,
hidden:true,
editor:new Ext.form.TextField({
allowBlank:false
})
},
{
header:'姓名',
id:'SNAME',
dataIndex:'SNAME',
width:200,
sortable:false;
hideable:false,
menuDisabled:true,
editor:new Ext.form.TextField({
allowBlank:false
})
},
{
header:'电话号码',
id:'PHONENUM',
dataIndex:'PHONENUM',
width:200,
sortable:false;
hideable:false,
menuDisabled:true,
editor:new Ext.form.TextField({
allowBlank:false
})
},
{
header:'职位',
id:'POST',
dataIndex:'POST',
width:200,
sortable:false;
hideable:false,
menuDisabled:true,
editor:new Ext.form.TextField({
allowBlank:false
})
},
{
header:'通知级别',
id:'SLEVEL',
dataIndex:'SLEVEL',
width:200,
sortable:false;
hideable:false,
menuDisabled:true,
editor:new Ext.form.TextField({
allowBlank:false
})
},
{
header:'单位',
id:'SUNIT',
dataIndex:'SUNIT',
width:200,
sortable:false;
hideable:false,
menuDisabled:true,
editor:new Ext.form.TextField({
allowBlank:false
})
},
{
header:'区县',
id:'SCOUNTY',
dataIndex:'SCOUNTY',
width:200,
sortable:false;
hideable:false,
menuDisabled:true,
editor:new Ext.form.TextField({
allowBlank:false
})
},
{
header:'乡镇',
id:'STOWN',
dataIndex:'STOWN',
width:200,
sortable:false;
hideable:false,
menuDisabled:true,
editor:new Ext.form.TextField({
allowBlank:false
})
},
{
header:'村',
id:'SVILLAGE',
dataIndex:'SVILLAGE',
width:200,
sortable:false;
hideable:false,
menuDisabled:true,
editor:new Ext.form.TextField({
allowBlank:false
})
},
{
header:'行政区划编号',
id:'SREGIONCODE',
dataIndex:'SREGIONCODE',
width:200,
sortable:false;
hideable:false,
menuDisabled:true,
editor:new Ext.form.TextField({
allowBlank:false
})
}
]);
var gridButton = [{
id:'addStaff',
text:'新增员工',
iconCls:'add',
disabled:false,
handler:addStaff
},'-',{
id:'modifyStaff',
text:'修改员工',
iconCls:'edit',
disabled:false,
handler:modifyStaff
},'-',{
id:'deleteStaff',
text:'删除员工',
iconCls:'delete',
disabled:false,
handler:deleteStaff
}];
5、定义分页栏
var pagingBar = new Ext.PagingToolbar({
pageSize:pageSize,
store:gridStore,
displayInfo:true,
displayMsg:'显示第{0}条到{1}条记录,共{2}条',
emptyMsg:'没有可显示的记录'
});
var gridStore = new Ext.data.Store({
proxy:new Ext.data.HttpProxy({url:getDocGridDataURL}),
reader:new Ext.data.JsonReader({
totalProperty:'totalProperty',
root:'root'
},gridPlant)
});
gridStore.on('beforeload',function(){
Ext.apply(this.baseParams,{
start:0;
limit:pageSize;
});
});
7、定义表格主体,将上面每一部分都添加到表格主体中,最下面是给grid注册的几个方法。
var grid = new Ext.grid.GridPanel({
id:'grid',
border:false,
store:gridStore,
cm:cm,
sm:sm,
title:'员工信息',
tbar:gridButton,
bbar:pagingBar,
listeners:{
render:gridCellShow
},
viewConfig:{
forceFit:true;
}
});
//表格显示
grid.show();
//表格加载数据
gridStore.load({params:{start:0,limit:pageSize}});
//给表格注册双击事件
grid.addListener("rowdblclick",modifyStaff);
到这里为止,一个表格就算做出来了。至于JSP页面,只需要引入相应的ExtJS文件,和上面这个grid的JS文件,再给出一个div用来盛放这个表格就行了。
总结
刚开始觉得ExtJS特别难,怎么自己都不会弄。结果弄出来之后,多看几遍代码就发现,它其实跟写后台代码一样,没什么太大的区别。曾经听过一句话,写程序很简单,只要把你的话说给电脑就行了。基础扎实了还是厉害的,对于新出来的技术,只要往直前的知识网里面一结合,就不难了。