EXTJS4.0.7开发积累
有从网络上搜索到的资源,也有自己开发中的总结,侵权告知删除!
一个windows窗口中有一个tabpanel,tabpanel有两个tab,每个tab有一个form,两个form使用相同的提交和重置按钮 | 每个form设置不同的itemId,以区别不同的form,看如下的reset(重置)按钮代码: buttons: [ { text:'重置', itemId:'userLoginReset', // action:'userLoginResetClick' handler:function(){ console.info("getActiveTab:"+this.up('window').down('tabpanel').getActiveTab().itemId); if(this.up('window').down('tabpanel').getActiveTab().itemId=='admin_form') this.up('window').down('#admin_form').getForm().reset(); elseif(this.up('window').down('tabpanel').getActiveTab().itemId=='logic_sys_form') this.up('window').down('#logic_sys_form').getForm().reset(); } ] |
在form中,添加的combobox控件的长度和别的控件的长度不一致 | 在form中添加如下的config信息: layout: 'anchor', defaults: { anchor: '100%' }, |
解决Extjs4级联下拉列表出现Loading遮罩 | 问题描述: 在Extjs4中,下拉列表级联处理时,发现第二个ComboBox出现Loading遮罩效果,数据已经加载了,但是半天没反应,一直现在在加载中, 解决方案: 只需要在ComboBox中配置:listConfig:{loadMask:false}属性即可。 |
store的read加载里面添加额外参数的方法(一) | 在需要的地方另外设置: this.getStore().proxy.extraParams.widget_name=myself.widget_name; this.getStore().load(); |
store的read加载里面添加额外参数的方法(二) | Store定义: Ext.define('DM.store.TblsStore_combobox',{ extend: 'Ext.data.Store', model: 'DM.model.TblsModel', // fields:['tbl_name','tbl_id'], autoLoad: false, pageSize: 20, proxy: { type: 'ajax', extraParams: {widget_name : name}, api: { read : 'getLogicSysTblsByWidgetName.action' }, reader: { type: 'json', root: 'list', totalProperty: 'totalCount' }, writer:{ type:'json' } } }); Load的时候只需指定extraParams就可以了,如下: store:Ext.create('DM.store.TblsStore_combobox').load({params:{widget_name:myself.widget_name}}) 发送请求的参数: _dc:1410077 widget_name:LogicSys_1_Page_1 page:1 start:0 limit:20 此时因为store执行了load,所以combobox的queryMode应该设置为local |
Create store的简单写法 | ,store:Ext.create('Ext.data.Store',{fields:['tbl_name','tbl_id']}) |
点击grid的actioncolumn进入edit界面前,获得该grid的id方法 | editPageBlock: function(grid,rowIndex, colIndex){ var view =Ext.widget('pageblockedit',{ widget_name:grid.up().id });} |
hql的联合查询
| Pageblock表中记录有tbl_id,col_id,希望gridlist中显示时根据tbl_id和col_id显示相应的表名(tbl_name)和字段名(col_name)【tbl_id,col_id分别位于不同的表中】,其中PageBlock对象中没有tbl_name和col_name属性
【先查询出PageBlock再根据里面的tbl_id和col_id查询出对应的tbl_name和col_name效率太低,直接使用hql的联合查询效率比较好】
PageBlock类对应数据库表pageblock,有映射文件,有tbl_id和col_id,没有自定义构造函数。 PageBlockList类没有对应数据库表,也不需要映射文件,但该类中有PageBlock类中没有的tbl_name和col_name属性。有自定义构造函数。 PageBlock的保存和PageBlockList的gridlist显示都是用相同的model,该model包含PageBlockList显示需要的所有字段,PageBlock保存的时候只用到了其中的一部分字段。 sb.append("select newcom.env.beimi.server.bo.noTable.PageBlockList(page.id,page.belong_page_id,page.page_block_type_id,page.page_block_label,"+ "page.page_block_desc,page.is_value_unique,page.value_not_null,page.tbl_id,"+ "page.col_id,page.auth_group_id,page.read_or_write,"+ "tbl.user_def_name,col.user_def_name,compt.compt_name)"); 如上的构造函数参数和PageBlockList中的构造函数参数一致。 PageBlock和PageBlockList要分开,要不会报错的。 |
Hql查询两个实体类,并组合成一个新的类用于显示 | 创建一个class temp【该类不需要映射文件】 有属性sid,name,tid,sname,tname 创建一个构造函数 public temp(sid,name,tid,sname,tname) {
} 在hql中 List<temp> select new 包名.temp(s.id,s.name,t.id,t.name)from User s,Useraddress t where t.id=s.id 【没有包名,会提示找不到temp类】 |
Window获取 | 在创建pageblockadd这个window时赋值: Ext.widget('pageblockadd',{ widget_name:button.up('grid').id }); 使用如下方法获取window对象,并取到值: widget_name:me.up('window').widget_name |
动态创建CheckboxGroup并赋值
获得CheckboxGroup的值
该代码是修改记录时的应用例子 | //1,创建FieldSet var authset=Ext.create('Ext.form.FieldSet',{ title: '权限组', defaults: { anchor: '100%' }, autoHeight: true, collapsible:false, }); //2,创建CheckBoxGroup var checkboxgrp=Ext.create('Ext.form.CheckboxGroup',{ allowBlank:false, columns : 2, itemId:'pageAuthGrp', vertical: false, }); //3,为CheckboxGroup添加item for(var key in authGrpList){ var item={ inputValue:eval('\''+authGrpList[key].id+'\'') ,boxLabel: authGrpList[key].authGrpName ,name:'authGrpIdTmp' }; checkboxgrp.add(item); } //4,把CheckboxGroup添加到FieldSet authset.add(checkboxgrp); //5,把FieldSet添加form中 me.down('form').add(authset); var authArray=me.down('form').down('#auth_group_id').getValue().split(','); console.info('kkkkkkk:'+authArray.toString()); //6,为CheckboxGroup赋值 me.down('form').down('#pageAuthGrp').setValue({authGrpIdTmp:authArray}); 注意如下: { xtype:'hidden', itemId:'auth_group_id', name:'auth_group_id' } 获值方法如下:(authGrpIdTmp就是CheckboxGroup的item的name,数据库里面保存对应值的应该是类似1,2,3的字串) var pageAuthGrpArray=button.up('window').down('#pageAuthGrp').getValue().authGrpIdTmp; button.up('window').down('#auth_group_id').setValue(pageAuthGrpArray.toString()); |
代码触发textfield的blur事件方法 | 控件定义:{xtype: 'image',width:20,margin: '0 5 0 0',src:'images/edit.png'} 调用该控件的hide()方法可以禁止显示,需要显示时调用show()方法。 |
代码触发textfield的blur事件方法 | 在textfield控件定义中: ,listeners:{ 'blur':function(){} } 在其他事件中,检索到该控件,并调用focus方法: this.up('form').down("#page_block_label").focus(); |
Combobox的,queryMode | 类似:store: Ext.create('DM.store.ComptsStore',{id:'comptsstore'}) 需要设置remote 其他的可以参考设置为local(特别是事件触发通过Ext.Ajax.request获取数据组装成store的) |
Combobox数据加载
(正确的方法才能获得正确的结果)
尽量使用callback方法 | var cols_store = Ext.create('Ext.data.Store', { fields: [ {type: 'string', name: 'col_name'}, {type: 'long', name: 'col_id'} ] }); //放在combobox的定义外 //在combobox的定义里面填写store值为cols_store store:cols_store select事件监听里面填充cols_store的内容,都没有必要使用Ext.apply方法。 'select':function(combo, records, eOpts){ var me=this; console.info("here+++++++++++++++++change event"); console.log('select info:'+records[0].get('tbl_id')); console.info("this:"+this.$className); me.next().next().store.removeAll(); me.next().next().setValue(-1); Ext.Ajax.request({ url:'getColsByBelongTblId.action', params:{ tbl_id:records[0].get('tbl_id') }, callback: function(options, success, response){ var respText = Ext.JSON.decode(response.responseText); var colsList=respText.list; for(var i in colsList){ cols_store.add({col_name:colsList[i].user_def_name,col_id:colsList[i].id}); console.info("col_name:"+colsList[i].user_def_name); console.info("col_id:"+colsList[i].id); } console.info('me::::'+me.$className); console.info('me.next().next():'+me.next().next().itemId); me.next().next().enable(); } }); } |
Combobox的change事件 | 'change':function(newValue,oldValue,eOpts){} newValue/oldValue都是combobox对象,newValue.getValue()可以获得该控件的value值 |
disable与setReadOnly的区别 | 控件执行disable()方法后,控件的值取不到,对于要更新的属性就无法更新 控件执行setReadOnly方法后,控件的值可以取到(true/false),与在控件定义里面直接输入readOnly:true/false相同效果 两个方法都可以到达不能修改控件值的目的,但还是有不同之处。 |
Form值的修改 | var values = form.getValues(); console.info('kkkkkkkkkk:'+eval(values).name); |
Ext.Msg | Ext.Msg.alert('提示',respText.message); Ext.Msg.show({ title:'提示', msg: respText.message, buttons: Ext.Msg.OK, icon: Ext.Msg.INFO }); |
Hibernate delete | public void delByParentId(String parentId){ final String parentIdTemp = parentId; StringBuffer sb = new StringBuffer(100); sb.append(" delete "); sb.append(" from MenuTree obj"); sb.append(" where obj.parentId=:parentIdTemp"); Query query = sessionFactory.getCurrentSession().createQuery(sb.toString()); query.setParameter("parentIdTemp", parentIdTemp); query.executeUpdate(); } |