原文出处http://blog.csdn.net/wanghuicai_123/article/details/6325669
1.dhcc.icare.ComboBox.js
/**------------------------------------------------------------
*@Copyright (c) 2011 DHC Software Co.,Ltd. ALL RIGHTS RESERVED
*@ComponentName dhcc.icare.ComboBox
*@extendFrom Ext.form.ComboBox
*@xType icombobox
*@forModel MComboBox
*@Author wanghc
*@Date 2011-03-28
*@Resume 重写Ext.form.ComboBox
*------------------------------------------------------------*/
/**----------------------------------------------------------
*@class dhcc.icare.ComboBox
*@extends Ext.form.ComboBox
*@constructor wanghc
*@xtype icombobox
*@param {Object} config The config object
*@cfg {String} displayFields
*@cfg {boolean} queryInFields
*@cfg {String} queryFields
*------------------------------------------------------------*/
Ext.ns("dhcc.icare");
dhcc.icare.ComboBox = Ext.extend(Ext.form.ComboBox, {
/**
*@desc 通过displayFields属性确定生成多列的combobox
*通过customData属性生成store
*生成queryFields属性值
*/
initComponent : function(){
dhcc.icare.ComboBox.superclass.initComponent(this);
},
onRender : function(ct,position){
dhcc.icare.ComboBox.superclass.onRender.call(this,ct,position);
if(this.customData){ // 自动生成store
var cd = this.customData ;
this.mode = 'local' ;
var cdField = [] ;
if(Ext.isArray(cd)){
if(Ext.isArray(cd[0])){ //[[],[]] 二维数组
this.valueField = this.valueField || 'field0' ;
for (var i = 0,len = cd[0].length ; i<len; i++){
cdField.push('field'+i) ;
}
this.store = new Ext.data.ArrayStore({ fields: cdField, data: cd});
}else if(Ext.isObject(cd[0])){ //[{},{}] json数组
for (var i in cd[0] ){
cdField.push(i) ;
}
this.store = new Ext.data.JsonStore({ fields: cdField, data: cd});
}
this.displayField = this.displayField || (cdField.length>1? cdField[1]:cdField[0]) ;
}
}
if((this.queryInFields===true)&&(this.mode=='local')){ //默认在全部列中查询
if(this.queryFields.length==0){
this.store.fields.each(function(f){this.queryFields.push(f.name);},this);
}
}
},
initList : function(){
if((!this.tpl)&&(this.displayFields)){ // 展示多列
var tplString = "" ;
var cls = 'x-combo-list';
var cbW = this.width || 150 ;
var dfLen = this.displayFields.length ;
var w = (cbW/dfLen).toFixed(2) ;
var f = this.store.fields ;
Ext.each(this.displayFields , function(name){
name = f.containsKey(name) ? name : f.keys[name] ; //列名或列号
tplString += '<td width='+w+'>{'+name+'}</td>' ;
},this);
this.tpl = new Ext.XTemplate(
'<table><tpl for="."><tr class="'+cls+'-item" height="20px" >',
tplString,
'</tr></tpl></table>'
);
}
dhcc.icare.ComboBox.superclass.initList.call(this);
},
/**
* @param {String} query 查询参数的值q
* @param {Boolean} forceAll 如果forceAll为true 显示全部记录,为false时则通过query参数查询
*/
doQuery : function(q,forceAll){
dhcc.icare.ComboBox.superclass.doQuery.call(this,q,forceAll);
q = Ext.isEmpty(q) ? '' : q;
if(!forceAll && (q.length >= this.minChars)){
if((this.queryInFields===true)&&(this.mode=='local')){
var len = this.queryFields.length ;
this.selectedIndex = -1;
var f = this.store.fields ;
this.store.filterBy(function(r,id){
for(var i=0 ; i<len ; i++){
var name = this.queryFields[i] ;
name = f.containsKey(name) ? name : f.keys[name] ;
if(RegExp("^"+q).test(r.get(name))){return true;}
}
return false ;
},this);
this.onLoad();
};
}
},
/**
*@param String/Json 增加对json的支持
*/
setValue : function(obj){
if(Ext.isString(obj)){
dhcc.icare.ComboBox.superclass.setValue.call(this,obj);
}else if(Ext.isObject(obj)){
this.setValue(obj[this.valueField || this.displayField]);
}
},
/**
*@param Ext.data.Record 把record作为combobox的选中值
*/
setRecordValue : function(r){
this.setValue(r.data[this.valueField || this.displayField]);
this.recordValue = r ;
return this;
},
/**
*@return Ext.data.Record 拿到combobox当前选中的记录
*/
getRecordValue : function(){
return this.recordValue ;
},
/**
*@desc overwrite
*/
select : function(index, scrollIntoView){
dhcc.icare.ComboBox.superclass.select.call(this,index, scrollIntoView);
if(this.selectedIndex == -1) {
this.recordValue = '' ;
}else{
this.recordValue = this.store.getAt(this.selectedIndex) ;
}
},
/**
*调用store的load方法
*/
load : function(options){
this.store.load(options) ;
},
/**
*调用store的loadData方法
*/
loadData : function(data,append){
this.store.loadData(data,append) ;
},
/**
*@desc 显示多列时用到
*@property displayFields Array field的列名或列号(丛0开始)组成的数组 如: [0,name,age,3]
*/
displayFields : '' ,
/**
*@property queryInFields boolean
*@desc true时 在多字段中查询(doQuery).false则在displayField中查询, 数据是本地时才有效
*/
queryInFields : false ,
/**
*@property queryFields Array
*@desc 多列查询的字段名,在queryInFields为true下,默认在全部列中查询,数据是本地时才有效 如: [0,name,age,3]
*/
queryFields : [],
/**
*@property recordValue Ext.data.Recode
*/
recordValue : '' ,
/**
*@property customData Array[Array]/Array[json]
*@desc 如果参数是二维数组则自动生成store,store的fields是field0.field1..., data则是二维数组, valueField:'field0', displayField:'field1'||'field0'
*/
customData : []
});
Ext.reg('icombobox', dhcc.icare.ComboBox);
2.index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>测试多列</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" href="ext-3.4.0/resources/css/ext-all.css" type="text/css"></link>
<script type="text/javascript" src="ext-3.4.0/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext-3.4.0/ext-all.js"></script>
<script type="text/javascript" src="dhcc.icare.ComboBox.js"></script>
<script >
Ext.onReady(function(){
var cbArr = [['4',"张麻子",'man'], ['6',"汤师爷",'man'], ['8',"黄四郎",'man'],['12',"夫人",'woman'], ['33',"小六子",'man']] ;
var cbJson = [{id:'4',name:'张麻子',sex:'man'},{id:'6',name:'汤师爷',sex:'man'},{id:'12',name:'夫人',sex:'woman'}];
var win=new Ext.Window({
title:"hello",
width:600,
height:400,
items: [{
title: '参保凭证',
height:450,
xtype:'form',
items: [{
xtype: "textfield",
itemId: "letterNumber",
name: "letterNumber",
tabIndex: 1,
enterIndex: '1',
fieldLabel: '编号<font color="#FF0000" >*</font>',
anchor: "50%",
maxLength : 50,
maxLengthText : '最大长度为50',
allowBlank: false
},{
xtype: "icombobox",
fieldLabel:'身份证号',
minChars:0,
triggerAction : 'all',
customData : cbArr, //cbJson ,
displayFields : [0,1,2],
displayFields : [0,1,2],
queryInFields : true,
anchor: "50%",
queryFields : [0,1,"field2"]
}],
}]
});
win.show();
});
</script>
</head>
<body>
</body>
</html>
发表评论
-
修改extjs4默认字体
2014-10-13 16:02 383.x-btn-default-small .x-btn ... -
ExtJs默认的字体大小改变的几种方法
2014-10-13 10:11 5961、 只需把ext-all.css样式文件中的所有11px换 ... -
Eclipse环境下配置spket中ExtJS提示
2014-08-20 14:57 469使用eclipse编写extjs时,一定会用到spket这个 ... -
extjs继承,先调用父类方法
2014-07-17 14:27 971Ext.define('Xap.core.ui.extjs. ... -
extjs4.0 Ext.Array 函数方法大全
2014-07-17 10:38 504Ext.onReady(function(){ ... -
JSDuck安装及使用
2014-07-15 10:40 1308Javascript:前端利器 之 JSDuck 目 ... -
ext 获取radiogroup的值
2013-03-07 11:46 840在grid工具栏中 this.tbar = [{ ... -
ext 上传
2013-01-28 22:23 609今天发现ext 上传带有如下特殊字符 \/:*?“< ... -
ext grid 隐藏列
2013-01-22 17:49 671如果是动态隐藏的话:grid.getColumnModel() ... -
comboboxGrid多列
2013-01-21 17:16 838未完善版,后期将贴出完善版,完善版主要是封装了grid ... -
解决Ext2.0中ComboBox执行Filter第一次无效的问题
2013-01-16 16:45 781解决Ext2.0中ComboBox执行Filter第一次无效 ... -
decode encode
2013-01-07 15:49 560Ext中有两个很重要的方法, 一个是decode,一 ... -
ExtJS之Ext.Ajax.request用法
2013-01-07 13:04 1041原文出处http://javacrazyer.iteye ... -
Ext.form各类控件的配置及方法
2012-12-19 14:30 699Ext.form各类控件的配置及方法 1、Ext.fo ... -
ExtJs中decode与encode
2012-12-10 18:03 604出自:http://blog.163.c ...
相关推荐
8.1.4 超级模板:ext.xtemplate(包括ext.xtemplateparser和ext.xtemplatecompiler) / 393 8.1.5 模板的方法 / 396 8.2 组件的基础知识 / 396 8.2.1 概述 / 396 8.2.2 组件类的整体架构 / 397 8.2.3 布局类的...
- `Ext.XTemplate.compile(tpl, config)`: 编译模板。 - `Ext.XTemplate.apply(data)`: 应用数据到模板。 #### 24. Ext.data.Connection 类 (P.22) - **概述**:用于处理HTTP请求。 - **常用方法**: - `Ext.data...
- **Ext.Ajax类**: 实现了与服务器异步通信的功能。 - **Ajax文件上传**: 使用ExtJS进行文件上传操作。 10. **分页与ComboBox** - **分页工具栏**: 提供了分页导航功能的工具栏。 - **从服务器获取数据**: 分页...
- 当 `ComboBox` 的下拉列表需要展示复杂数据结构时,如多列或带有自定义样式的数据,可以使用 `GridComboBox`。 - `GridComboBox` 可以设置为单选或多选模式,根据业务需求选择合适的交互方式。 4. **配置与实现...
8.3.3. 醍醐灌顶,功能强劲的模板引擎XTemplate。 8.4. Ext.data命名空间 8.4.1. proxy系列 8.4.1.1. 人畜无害MemoryProxy 8.4.1.2. 常规武器HttpProxy 8.4.1.3. 洲际导弹ScriptTagProxy 8.4.2. reader系列 8.4.2.1....
- **示例**: 使用 `Ext.Fx` 和 `Ext.Element` 类中的动画函数实现动态效果。 #### 五、元素操作与模板 **5.1 元素操作** - **工具**: `Ext.DomHelper` 类提供了创建、操作 DOM 元素的方法。 - **示例**: `Ext....
- 介绍如何使用更复杂的列模型配置来实现高级功能。 #### 二十、行模型与Grid视图 1. **行选择模型** - 控制用户如何选择表格中的行。 2. **Grid视图** - Grid视图负责渲染表格数据和行选择模型。 #### 二十一...
- 通过`Ext.XTemplate.compile()`方法编译模板字符串,然后使用`apply`方法填充数据。 #### 六、格式化 - **用户需要优秀体验的内容** - 指的是在用户界面上呈现的数据应该易于阅读和理解。 - 例如日期、货币、...
ExtJS 是一个强大的JavaScript库,专门...总之,使用ExtJS创建动态加载数据的下拉列表涉及数据源配置、Ajax请求、模板定义、事件监听等多个方面。通过灵活运用这些特性,可以构建出满足各种业务需求的交互式UI组件。
- **Ext.XTemplate**:讲解了XTemplate的使用,这是一种用于动态生成HTML的模板引擎,非常适合数据驱动的页面。 #### 第七章:格式化 - **用户需要优秀体验的内容**:强调了内容呈现对于用户体验的影响,以及如何...
- 使用`Ext.Fx`类实现基本动画效果。 - `Ext.Element`类提供了更高级的动画方法。 #### 6. 元素操作与模板 - **DomHelper类**: 提供了操作DOM元素的方法。 - **XTemplate**: 用于动态渲染HTML内容,支持条件和...
1. **Ajax 技术**:**EXT** 是基于 **Ajax** 技术构建的,这意味着它可以实现无刷新页面更新,提升用户体验。 2. **跨平台兼容性**:**EXT** 支持多种浏览器,并且能够确保在不同操作系统和浏览器环境下的稳定性和...