EXTJS4.0.7开发积累(9)

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.MsgExt.Msg.alert('提示',respText.message);
Ext.Msg.show({
title:'提示',
msg: respText.message,
buttons: Ext.Msg.OK,
icon: Ext.Msg.INFO
});
Hibernate deletepublic 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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值