当前位置: 代码网 > it编程>前端脚本>ExtJs > Extjs4.0 ComboBox如何实现三级联动

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

2024年05月15日 ExtJs 我要评论
很多网友在问,extjs4.0 combobox如何实现,好在之前用3.x实现过一个三级联动,如今用extjs4.0来实现同样的联动效果。其中注意的一点就是,3.x中的model:'local'在ex

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

代码部分

先看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
%>

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com