很多网友在问,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 %>
以上就是本文的全部内容,希望对大家的学习有所帮助。
发表评论