ok,接上回,我们已经完成了一个界面,一颗ajax tree,那么今天我们将完成树的事件的侦听,表格的实现和extjs的继承。
首先,我们来完成最容易的东东,树的侦听,修改上一节的tree代码,使它看起来像这个样子:
easy吧,listeners是一个初始化属性,专门用于定义事件的,在api中大家可以自行查找,里面的东东很丰富,选择一个适合自己的吧,
什么?你问我这个attributes是哪里来的?其实,我是firebug来的......,别扔砖头啊。
好吧,我确实偷懒了,但是有神器干嘛不用呢?不能应为有了汽车就忘记自己还会走路的是吧,嘿嘿。
ok,其余的控件,大家都知道该如何搞定了吧。
那么我们继续,开始extjs的继承,重量级明星,鼓掌!~~~~
extjs的继承来自于这个函数:Ext.extend(),extjs 4之后的使用另外的一个函数好像叫Ext.define(),各位可以去查查。
我们重写一个button,来段实在的例子,它看起来像这样子:
看懂了吗?我们的Ext.ux.TestButton继承来自于Ext.Button,这个button在被运行后大概是这样子的
现在我们有了重量级武器,继承,那么意味着什么呢?意味着我们现在可以进入一个被到处吓人的境界,组件化开发。
我们在正式的项目的时候会有这方面的需求,因为为了保证界面的统一和用户习惯的统一,我们需要大部分的界面进行封装,
让调用的人使用简单,并且还可以根据需要在继承扩张,这样我们是不是更面向对象呢?
下面,主角来了哦,我们的table,我们先来个基类,让所有的table都来自于这个basetable,主要是定义下样式,看起来统一点^^。
1 Ext.namespace("hyxy.base"); //命名空间 2 3 //所有表格显示的基本类型 4 //需要传入id,store,columnsmodel 5 hyxy.base.BaseGridPanel = Ext.extend(Ext.grid.GridPanel,{ 6 constructor : function (conf) { 7 hyxy.base.BaseGridPanel.superclass.constructor.call(this,{ 8 id : conf.id, 9 store : conf.store, 10 frame : true, 11 waitMsg : '正在载入数据......', 12 viewConfig : { 13 forceFit : true 14 //getRowClass : function(record,rowIndex,p,ds){ //自定义行颜色 15 16 //} 17 }, 18 columnLines : true, 19 stripeRows: true, 20 autoHeight : true, 21 autoScroll : true, 22 loadMask : true, 23 stateful: true, 24 sm : new Ext.grid.CheckboxSelectionModel(), //是否有复选模式 25 columns : conf.columns, //列模式 26 bbar : new Ext.PagingToolbar ({ 27 pageSize : 20, //每页显示页数 28 store : hyxy.templ.WebPart.webPartStore, 29 displayInfo : true, 30 emptyMsg : '没有数据' 31 }), 32 tbar : new Ext.Toolbar({ 33 id : 'webpartbar', 34 items : [ 35 { 36 xtype:'button', 37 text : '添加', 38 id : 'add', 39 icon : '/images/add.ico' 40 }, 41 { 42 xtype:'button', 43 text : '修改', 44 id : 'update', 45 icon : '/images/update.ico' 46 }, 47 { 48 xtype:'button', 49 text : '删除', 50 id : 'del', 51 icon : '/images/del.ico' 52 } 53 ], 54 listeners: { 55 render : function(){ 56 var addBtn = Ext.getCmp('add'); 57 var upBtn = Ext.getCmp('update'); 58 var delBtn = Ext.getCmp('del'); 59 60 addBtn.on('click',function(){ 61 62 }); 63 64 upBtn.on('click',function(){ 65 alert('b'); 66 }); 67 68 delBtn.on('click',function(){ 69 alert('c'); 70 }); 71 } 72 } 73 }) 74 }) 75 } 76 });
这里重载了constructor方法,需要强调一点,如果我们重载constructor方法,那么Extjs的处理和其他的方法并不一样,特别强调哦,有什么不一样,大家看看Ext.extend的源码就知道,
这里不是我的重点,所以,掠过了哦^^。
ok,今天我们学习了tree的listeners,extjs的继承,并且通过继承重写了一个table,下一张我将给大家介绍extjs中的table是如何加载数据的,如何建立表结构的,其实秘密就在Store,columns
这两个属性中哦。