Extjs4.0 ComboBox如何實現(xiàn)三級聯(lián)動
很多網(wǎng)友在問,Extjs4.0 ComboBox如何實現(xiàn),好在之前用3.x實現(xiàn)過一個三級聯(lián)動,如今用Extjs4.0來實現(xiàn)同樣的聯(lián)動效果。其中注意的一點就是,3.x中的model:'local'在Extjs4.0中用queryMode: 'local'來表示,而且在3.x中Load數(shù)據(jù)時用reload,但是在extjs4.0中要使用load來獲取數(shù)據(jù)。如下圖:
代碼部分
先看HTML代碼:
<html > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>MHZG.NET-城市三級聯(lián)動實例</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'} ] }); //加載省數(shù)據(jù)源 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 }); //加載市數(shù)據(jù)源 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 }); //加載區(qū)數(shù)據(jù)源 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:"城市三級聯(lián)動", 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("錯誤","數(shù)據(jù)加載失敗。"); } } } }, { 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("錯誤","數(shù)據(jù)加載失敗。"); } } } }, { xtype:"combo", name:'qu', id : 'qu', fieldLabel:'選擇區(qū)', displayField:'cname', valueField:'id', store:store2, triggerAction:'all', queryMode: 'local', selectOnFocus:true, forceSelection: true, allowBlank:false, editable: true, emptyText:'請選擇區(qū)', blankText : '請選擇區(qū)', } ] }) });
上述代碼中,如果在ComboBox直接定義store數(shù)據(jù)源,會出現(xiàn)這樣一種情況,那就是當(dāng)選擇完第一個省,點擊第二個市的時候,會閃一下,再點擊,才會出現(xiàn)市的數(shù)據(jù)。那么要解決這樣的情況,那么必須先要定義好省、市、區(qū)的數(shù)據(jù)源。那么再點擊的時候,就不會出現(xiàn)上述情況了。
代碼中,使用store為省的數(shù)據(jù),設(shè)置其autoLoad為true,那么頁面第一次加載的時候,就會自動加載省的數(shù)據(jù),然后給省和市添加了監(jiān)聽select,作用在于當(dāng)點擊省的時候,要清空市和區(qū)的數(shù)據(jù),并根據(jù)當(dāng)前選定的值去加載對應(yīng)的數(shù)據(jù)到市的數(shù)據(jù)源中。當(dāng)然store1和store2原理是一樣的。
最后,服務(wù)端要根據(jù)傳的值進(jìn)行數(shù)據(jù)檢索及返回正確數(shù)據(jù),這里沒有從數(shù)據(jù)庫中查詢數(shù)據(jù),而只是簡單的寫了一些測試代碼,相信extjs代碼沒有任何的問題了,那么服務(wù)端返回數(shù)據(jù),就不是一件很重要的事情了。
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"":""內(nèi)蒙古自治區(qū)"",""id"":""150000""}") Response.Write("]") End If If act = "shi" Then If param = "110000" Then Response.Write("[") Response.Write("{""cname"":""市轄區(qū)"",""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"":""朝陽區(qū)"",""id"":""110101""},") Response.Write("{""cname"":""昌平區(qū)"",""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"":""回民區(qū)"",""id"":""150101""},") Response.Write("{""cname"":""新城區(qū)"",""id"":""150102""}") Response.Write("]") ElseIf param = "150200" Then Response.Write("[") Response.Write("{""cname"":""青山區(qū)"",""id"":""150201""},") Response.Write("{""cname"":""東河區(qū)"",""id"":""150202""}") Response.Write("]") End If End If %>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
- ExtJS4給Combobox設(shè)置列表中的默認(rèn)值示例
- Extjs中ComboBoxTree實現(xiàn)的下拉框樹效果(自寫)
- extjs3 combobox取value和text案例詳解
- Extjs中ComboBox加載并賦初值的實現(xiàn)方法
- Extjs EditorGridPanel中ComboBox列的顯示問題
- extjs中g(shù)rid中嵌入動態(tài)combobox的應(yīng)用
- ExtJS PropertyGrid中使用Combobox選擇值問題
- ExtJs使用總結(jié)(非常詳細(xì))
- ExtJS 學(xué)習(xí)專題(一) 如何應(yīng)用ExtJS(附實例)
- Extjs讓combobox寫起來簡潔又漂亮
相關(guān)文章
Extjs中通過Tree加載右側(cè)TabPanel具體實現(xiàn)
用Extjs4.1來做界面,有關(guān)Extjs4.1資料在網(wǎng)上也相對來說較少,下面是具體的實現(xiàn)代碼1.左側(cè)的功能樹2.需要打開的對應(yīng)的view,有類似需求的朋友可以參考下哈2013-05-05