Extjs4.0 ComboBox如何实现三级联动


Posted in Javascript onMay 11, 2016

很多网友在问,Extjs4.0 ComboBox如何实现,好在之前用3.x实现过一个三级联动,如今用Extjs4.0来实现同样的联动效果。其中注意的一点就是,3.x中的model:'local'在Extjs4.0中用queryMode: 'local'来表示,而且在3.x中Load数据时用reload,但是在extjs4.0中要使用load来获取数据。如下图:

Extjs4.0 ComboBox如何实现三级联动

代码部分

先看HTML代码:

<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MHZG.NET-城市三级联动实例</title>
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
<script type="text/javascript" src="../../bootstrap.js"></script>
<script type="text/javascript" src="../../locale/ext-lang-zh_CN.js"></script>
<script type="text/javascript" src="combobox.js"></script>
</head>

<body>
</body>
</html>

简单的很,就是加载了基本的CSS文件和JS文件,并且加载自定义的combobox.js文件。

combobox.js:

Ext.require('Ext.*');
Ext.onReady(function(){
 //定义ComboBox模型
 Ext.define('State', {
   extend: 'Ext.data.Model',
   fields: [
     {type: 'int', name: 'id'},
     {type: 'string', name: 'cname'}
   ]
 });
 
 //加载省数据源
 var store = Ext.create('Ext.data.Store', {
   model: 'State',
   proxy: {
     type: 'ajax',
     url: 'city.asp?act=sheng&n='+new Date().getTime()+''
   },
   autoLoad: true,
   remoteSort:true
 });
 //加载市数据源
 var store1 = Ext.create('Ext.data.Store', {
   model: 'State',
   proxy: {
     type: 'ajax',
     url: 'city.asp?act=shi&n='+new Date().getTime()+''
   },
   autoLoad: false,
   remoteSort:true
 });
 //加载区数据源
 var store2 = Ext.create('Ext.data.Store', {
   model: 'State',
   proxy: {
     type: 'ajax',
     url: 'city.asp?act=qu&n='+new Date().getTime()+''
   },
   autoLoad: false,
   remoteSort:true
 });
  
 
 
 Ext.create("Ext.panel.Panel",{
  renderTo: document.body,
  width:290,
  height:220,
  title:"城市三级联动",
  plain: true,
  margin:'30 10 0 80',
  bodyStyle: "padding: 45px 15px 15px 15px;",
  defaults :{
    autoScroll: true,
    bodyPadding: 10
  },
  items:[{
    xtype:"combo",
    name:'sheng',
    id : 'sheng',
    fieldLabel:'选择省',
    displayField:'cname',
    valueField:'id',
    store:store,
    triggerAction:'all',
    queryMode: 'local', 
    selectOnFocus:true,
    forceSelection: true,
    allowBlank:false,
    editable: true,
    emptyText:'请选择省',
    blankText : '请选择省',
    listeners:{  
      select:function(combo, record,index){
         try{
           //userAdd = record.data.name;
           var parent=Ext.getCmp('shi');
           var parent1 = Ext.getCmp("qu");
           parent.clearValue();
           parent1.clearValue();
           parent.store.load({params:{param:this.value}});
         }
         catch(ex){
           Ext.MessageBox.alert("错误","数据加载失败。");
         }
      }
    }
    },
    {
    xtype:"combo",
    name:'shi',
    id : 'shi',
    fieldLabel:'选择市',
    displayField:'cname',
    valueField:'id',
    store:store1,
    triggerAction:'all',
    queryMode: 'local',
    selectOnFocus:true,
    forceSelection: true,
    allowBlank:false,
    editable: true,
    emptyText:'请选择市',
    blankText : '请选择市',
    listeners:{  
      select:function(combo, record,index){
         try{
           //userAdd = record.data.name;
           var parent = Ext.getCmp("qu");
           parent.clearValue();
           parent.store.load({params:{param:this.value}});
         }
         catch(ex){
           Ext.MessageBox.alert("错误","数据加载失败。");
         }
      }
    }
    },
    {
    xtype:"combo",
    name:'qu',
    id : 'qu',
    fieldLabel:'选择区',
    displayField:'cname',
    valueField:'id',
    store:store2,
    triggerAction:'all',
    queryMode: 'local',
    selectOnFocus:true,
    forceSelection: true,
    allowBlank:false,
    editable: true,
    emptyText:'请选择区',
    blankText : '请选择区',
    }
  ]
 })
});

上述代码中,如果在ComboBox直接定义store数据源,会出现这样一种情况,那就是当选择完第一个省,点击第二个市的时候,会闪一下,再点击,才会出现市的数据。那么要解决这样的情况,那么必须先要定义好省、市、区的数据源。那么再点击的时候,就不会出现上述情况了。

代码中,使用store为省的数据,设置其autoLoad为true,那么页面第一次加载的时候,就会自动加载省的数据,然后给省和市添加了监听select,作用在于当点击省的时候,要清空市和区的数据,并根据当前选定的值去加载对应的数据到市的数据源中。当然store1和store2原理是一样的。

最后,服务端要根据传的值进行数据检索及返回正确数据,这里没有从数据库中查询数据,而只是简单的写了一些测试代码,相信extjs代码没有任何的问题了,那么服务端返回数据,就不是一件很重要的事情了。

City.asp:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
  Response.ContentType = "text/html"
  Response.Charset = "UTF-8"
%>
<%
  Dim act:act = Request("act")
  Dim param : param = Request("param")
  If act = "sheng" Then
    Response.Write("[")
    Response.Write("{""cname"":""北京市"",""id"":""110000""},")
    Response.Write("{""cname"":""内蒙古自治区"",""id"":""150000""}")
    Response.Write("]")
  End If
  If act = "shi" Then
    If param = "110000" Then
      Response.Write("[")
      Response.Write("{""cname"":""市辖区"",""id"":""110100""},")
      Response.Write("{""cname"":""市辖县"",""id"":""110200""}")
      Response.Write("]")
    ElseIf param = "150000" Then
      Response.Write("[")
      Response.Write("{""cname"":""呼和浩特市"",""id"":""150100""},")
      Response.Write("{""cname"":""包头市"",""id"":""150200""}")
      Response.Write("]")
    End If
  End If
  If act = "qu" Then
    If param = "110100" Then
      Response.Write("[")
      Response.Write("{""cname"":""朝阳区"",""id"":""110101""},")
      Response.Write("{""cname"":""昌平区"",""id"":""110102""}")
      Response.Write("]")
    ElseIf param = "110200" Then
      Response.Write("[")
      Response.Write("{""cname"":""密云县"",""id"":""110201""},")
      Response.Write("{""cname"":""房山县"",""id"":""110202""}")
      Response.Write("]")
    ElseIf param = "150100" Then
      Response.Write("[")
      Response.Write("{""cname"":""回民区"",""id"":""150101""},")
      Response.Write("{""cname"":""新城区"",""id"":""150102""}")
      Response.Write("]")
    ElseIf param = "150200" Then
      Response.Write("[")
      Response.Write("{""cname"":""青山区"",""id"":""150201""},")
      Response.Write("{""cname"":""东河区"",""id"":""150202""}")
      Response.Write("]")
    End If
  End If
%>

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
Feb 18 Javascript
JQuery中extend使用介绍
Mar 13 Javascript
js为什么不能正确处理小数运算?
Dec 29 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
AngularJS入门教程之Cookies读写操作示例
Nov 02 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
Apr 10 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
Dec 23 Javascript
详解JavaScript中的数组合并方法和对象合并方法
May 11 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
vue中动态select的使用方法示例
Oct 28 Javascript
详解Vue中的MVVM原理和实现方法
Jul 15 Javascript
javascript简单判断输入内容是否合法的方法
May 11 #Javascript
解析JavaScript面向对象概念中的Object类型与作用域
May 10 #Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
May 10 #Javascript
JavaScript中的原型prototype完全解析
May 10 #Javascript
简单解析JavaScript中的__proto__属性
May 10 #Javascript
Web Uploader文件上传插件使用详解
May 10 #Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
May 10 #Javascript
You might like
我的论坛源代码(八)
2006/10/09 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
javascript object array方法使用详解
2012/12/03 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
vue实现购物车案例
2020/05/30 Javascript
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
python生成器generator用法实例分析
2015/06/04 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
python中pip的安装与使用教程
2018/08/10 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
python样条插值的实现代码
2018/12/17 Python
浅析python 字典嵌套
2020/09/29 Python
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
幼儿运动会邀请函
2014/01/17 职场文书
运输服务质量承诺书
2014/03/27 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
公司捐款倡议书
2014/05/14 职场文书
销售团队口号大全
2014/06/06 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
企业领导对照检查材料
2014/08/20 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript