Heim > Artikel > Web-Frontend > Wie Extjs4.0 ComboBox dreistufige linkage_extjs implementiert
Viele Internetnutzer fragen sich, wie man Extjs4.0 ComboBox implementiert. Glücklicherweise wurde zuvor mit 3.x eine dreistufige Verknüpfung implementiert, und jetzt wird Extjs4.0 verwendet, um den gleichen Verknüpfungseffekt zu erzielen. Zu beachten ist, dass model:'local' in 3.x durch queryMode: 'local' in Extjs4.0 dargestellt wird und reload beim Laden von Daten in 3.x verwendet wird, in extjs4.0 jedoch verwendet werden muss laden, um die Daten zu erhalten. Wie unten gezeigt:
Codeteil
Schauen Sie sich zuerst den HTML-Code an:
<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>
Es ist ganz einfach: Laden Sie einfach die grundlegenden CSS-Dateien und JS-Dateien und laden Sie die angepasste Datei „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 : '请选择区', } ] }) });
Wenn Sie im obigen Code die Datenquelle des Geschäfts direkt in der ComboBox definieren, kommt es zu einer Situation, in der, wenn Sie die erste Provinz auswählen und auf die zweite Stadt klicken, diese für einen Moment blinkt und dann erneut geklickt wird . Stadtdaten werden angezeigt. Um diese Situation zu lösen, müssen wir zunächst die Datenquellen der Provinzen, Städte und Bezirke definieren. Wenn Sie dann erneut klicken, tritt die obige Situation nicht auf.
Verwenden Sie im Code den Store als Daten der Provinz und setzen Sie autoLoad auf true. Wenn die Seite dann zum ersten Mal geladen wird, werden die Daten der Provinz automatisch geladen und anschließend wird eine Überwachungsauswahl hinzugefügt Provinz und Stadt Der Effekt besteht darin, dass beim Klicken auf die Seite beim Auswählen einer Provinz die Stadt- und Bezirksdaten gelöscht und die entsprechenden Daten basierend auf den aktuell ausgewählten Werten in die Stadtdatenquelle geladen werden müssen. Natürlich sind die Prinzipien von Store1 und Store2 dieselben.
Schließlich muss der Server Daten abrufen und die korrekten Daten basierend auf dem übergebenen Wert zurückgeben. Hier gibt es keine Datenabfrage aus der Datenbank, sondern es gibt meiner Meinung nach keine Probleme mit dem extjs-Code. Dann ist die Rückgabe von Daten durch den Server keine sehr wichtige Sache.
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 %>
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.