Maison > Article > interface Web > Comment Extjs4.0 ComboBox implémente linkage_extjs à trois niveaux
De nombreux internautes demandent comment implémenter Extjs4.0 ComboBox. Heureusement, une liaison à trois niveaux a été implémentée avant d'utiliser 3.x, et maintenant Extjs4.0 est utilisé pour obtenir le même effet de liaison. Une chose à noter est que model:'local' dans 3.x est représenté par queryMode: 'local' dans Extjs4.0, et le rechargement est utilisé lors du chargement des données dans 3.x, mais il doit être utilisé dans extjs4.0. charger pour obtenir les données. Comme indiqué ci-dessous :
Partie code
Regardez d'abord le code 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>
C'est très simple, il suffit de charger les fichiers CSS et JS de base, et de charger le fichier combobox.js personnalisé.
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 : '请选择区', } ] }) });
Dans le code ci-dessus, si vous définissez directement la source de données du magasin dans la ComboBox, il y aura une situation où lorsque vous sélectionnez la première province et cliquez sur la deuxième ville, elle clignotera un instant, puis cliquez à nouveau . Les données de la ville apparaissent. Pour résoudre cette situation, nous devons d'abord définir les sources de données des provinces, des villes et des districts. Ensuite, lorsque vous cliquez à nouveau, la situation ci-dessus ne se produira pas.
Dans le code, utilisez le magasin comme données de la province et définissez son autoLoad sur true. Ensuite, lorsque la page est chargée pour la première fois, les données de la province seront automatiquement chargées, puis une sélection de surveillance sera ajoutée au fichier. Province et ville L'effet est que lorsque vous cliquez sur la page Lors de la sélection d'une province, les données de la ville et du district doivent être effacées et les données correspondantes doivent être chargées dans la source de données de la ville en fonction des valeurs actuellement sélectionnées. Bien entendu, les principes de store1 et store2 sont les mêmes.
Enfin, le serveur doit récupérer les données et renvoyer les données correctes en fonction de la valeur transmise. Il n'y a pas de requête de données à partir de la base de données ici, mais simplement l'écriture d'un code de test. Je pense qu'il n'y a aucun problème avec le code extjs, alors le serveur Renvoyer des données n'est pas une chose très importante.
Ville.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 %>
Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.