<html>
<head>
<!-- 加载ExtJS -->
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css"/>
<script src="extjs/resources/ext-all.js"></script>
<script src="extjs/resources/ext-lang-zh_CN.js"></script>
<script language="javascript">
Ext.onReady(function(){
//性别store
var sexStore = Ext.create('Ext.data.Store', {
fields: ['code', 'name'],
data : [
{"code":"0", "name":"female"},
{"code":"1", "name":"male"}
]
});
//所有人Store
var people = Ext.create('Ext.data.Store', {
fields: ['code','sexcode', 'name'],
data : [
{"code":"0", "sexcode":"0", "name":"li"},
{"code":"1","sexcode":"0", "name":"zhang"},
{"code":"2","sexcode":"1", "name":"sun"},
]
});
//combobox显示指定性别store
var peopleChoose = Ext.create('Ext.data.Store', {
fields: ['code','sexcode', 'name']
});
// 选择性别 combobox
Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Choose Sex',
store: sexStore,
id:'combo.ChooseSex',
queryMode: 'local',
displayField: 'name',
valueField: 'code',
renderTo: Ext.getBody(),
listeners:{
'change':function(thisField,newValue,oldValue,epots){
if(newValue!=null){
Ext.getCmp('combo.ChoosePeople').setDisabled(false);
people.filterBy(function(record){
return record.get('sexcode')==newValue;
});
Ext.getCmp('combo.ChoosePeople').expand();
//使用peopleStore时
// peopleChoose.removeAll();
// people.each(function(record){
// //过滤通过性别选择符合的人员数据
// if(record.get('sexcode')==newValue){
// peopleChoose.add(record);
// }
// });
}else{
Ext.getCmp('combo.ChoosePeople').setDisabled(true);
}
}
}
});
Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Choose People',
//store: peopleChoose,
store:people,
disabled:true,
id:'combo.ChoosePeople',
queryMode: 'local',
displayField: 'name',
valueField: 'code',
autoSelect:false,
renderTo: Ext.getBody()
});
Ext.create('Ext.Button', {
text: 'submit',
renderTo: Ext.getBody(),
handler: function() {
var sexCode = Ext.getCmp('combo.ChooseSex').getValue();
var nameCode = Ext.getCmp('combo.ChoosePeople').getValue();
//排除为null时,赋值为""
if(!sexCode){
sexCode="";
}
if(!nameCode){
nameCode="";
}
alert("sexCode:"+sexCode+"\tnameCode:"+nameCode);
}
});
});
</script>
<!-- Put your page Title here -->
<title> Cache Server Page </title>
</head>
<body>
combobox测试
</body>
</html>
直接上html页面代码,做了个简单的测试例子



这里选择将第二个combobox组件在第一个值为null的时候disabled,有值的时候可以使用。需要注意的是combobox值为空时获取到的value是null,这样我们在提交的时候一定要注意处理,将为null的的值进行处理,这里我们赋值为"".
存在的问题:

事件监听choose sex 控件的change时,改变后直接展开choosePeople,数据是过滤后的,但是当我第一次点击choosePeople的下拉框时就会加载所有的peopleStore中的数据,第二次点击就不会加载所有数据。如何解决这样的问题,(代码中注释掉的用第三个store的办法除外)
分享到:
相关推荐
本文将深入探讨如何在ExtJS中实现ComboBox的二级联动。 首先,我们需要理解ExtJS中的ComboBox基本结构。ComboBox由几个关键部分组成,包括store(数据存储)、displayField(显示字段)和valueField(值字段)。...
2. 二级联动:指两个或多个Combobox之间存在依赖关系,当一个Combobox的值改变时,另一个Combobox的选项也会相应更新。 二、实现原理 1. 数据模型:通常使用Store来存储数据,Store中每个记录包含多个字段,对应...
在ExtJS 4.0中实现ComboBox的三级联动,我们需要创建三个不同的数据存储(Store),分别对应省份、城市和区县。每个Store都需要一个Model来定义数据结构,并配置代理(Proxy)来从服务器获取数据。这里我们将详细...
本案例涉及的关键技术主要包括Extjs4框架中的`combobox`组件以及Struts2框架,通过这两种技术实现了省市区三级联动的效果。下面将详细介绍其中涉及到的核心知识点。 #### 二、Extjs4 combobox组件介绍 1. **基础...
在ExtJS中,"二级联动"通常指的是两个或多个下拉框(ComboBox)之间的联动效果,即在一个下拉框选择一个选项后,另一个下拉框会根据前者的选值动态更新其选项。这在数据筛选、地区选择、分类细化等场景中非常常见。 ...
本文将深入探讨如何使用ExtJS 3结合MySQL来实现一个省份城市二级联动的前端与后台系统。 首先,ExtJS 3提供了丰富的组件和API,使得开发者可以轻松创建各种复杂的用户界面,如下拉菜单、表格、表单等。在这个案例中...
"EXT中COMBOBOX联动"指的是在EXTJS应用中,两个或多个COMBOBOX之间实现数据交互和联动效果,即当一个COMBOBOX的选择项改变时,会触发其他COMBOBOX的更新,以展示与当前选择相关联的数据。 EXTJS的COMBOBOX联动通常...