Annonce
Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).
En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.
#1 Tue 17 October 2017 16:37
- babef eric
- Participant occasionnel
- Lieu: Agde
- Date d'inscription: 22 Jul 2010
- Messages: 21
- Site web
ExtJS 3.4 - comboBox en cascade
Bonjour,
Je me permets de poster ce message ici car je rencontre un problème en développement concernant la librairie ExtJS version 3.4 que j'utilise conjointement avec OL 2.
Comme le sujet l'indique, j'ai deux
comboBox
que je souhaite utiliser en cascade dans un formulaire.
Le premier est obtenu de cette façon :
Code:
var groupe_cible = new Ext.data.JsonStore({ url : "data/fonctions_data.php?pFunction=access_group&user_id=" + p, fields: [ {name: 'value', mapping: 'value', type: 'string'}, {name: 'id', mapping: 'id_group', type: 'int'} ], autoLoad : true });
Le résultat json de la requête est :
Code:
[{"value":"fibre","id_group":1},{"value":"eau_pluviale","id_group":2}]
Le deuxième comboBox est obtenu de cette façon :
Code:
var param_cible = new Ext.data.ArrayStore({ //pruneModifiedRecords: true, autoDestroy: true, url : "data/fonctions_data.php?pFunction=access_param&user_id=" + p, fields: [ {name: 'value', mapping: 'value', type: 'string'}, {name: 'id', mapping: 'id', type: 'int'}, {name: 'groupcode', mapping: 'groupcode', type: 'int'} ], autoLoad : true });
Le résultat json de la requête est :
Code:
[{"value":"vias","id":2,"groupcode":2},{"value":"cahm","id":1,"groupcode":1},{"value":"agde","id":2,"groupcode":2}]
Le lien entre les deux requêtes se fait via id_group, premier json, et groupcode, deuxième json.
Pour mettre en oeuvre mes 2 comboBox, le code est le suivant :
Code:
id: "contenutypetraitementdict", x: 5, y: 55, width : 150, store: groupe_cible, emptyText:'Choisir le type de traitement', valueField: 'id', displayField: 'value', typeAhead: false, editable: false, mode: 'local', allowBlank:false, forceSelection: true, border: false, triggerAction: 'all', //lastQuery: '', selectOnFocus:true, listeners: { select : function(cmb, group, idx) { autosStore = paramCombo.getStore(); paramCombo.clearValue(); autosStore.clearFilter(); autosStore.filterBy(function(item) { var paramCode = item.get('groupcode'); var selected = (paramCode === group.data.id); return selected; }); paramCombo.enable(); } } }); var paramCombo = new Ext.form.ComboBox({ id: "contenutypetraitementdictparam", x: 5, y: 85, width : 150, store: param_cible, emptyText:'Choisir le type de traitement', allowBlank:false, valueField: 'id', displayField: 'value', //border: false, typeAhead: false, editable: false, mode: 'local', forceSelection: true, triggerAction: 'all', lastQuery: '', selectOnFocus:true });
Ces deux comboBox sont ensuite dans un FormPanel.
Le lien se fait, cependant, j'ai une erreur que je n'arrive pas comprendre (voir l'image en PJ).
En choisissant une première valeur, la deuxième liste déroulante me propose les valeurs liées. Cependant, je ne peux choisir que la première valeur. En reprenant l'exemple en PJ, si je clique sur "agde", j'ai toujours la valeur "vias" par défaut.
Firebug ne m'aide pas beaucoup. J'ai beaucoup cherché sur le net, mais sans succès. En effet, le problème n'est pas bien clair (en tout les cas pour moi).
Je vous remercie par avance pour votre aide.
Cordialement.
Eric BABEF
Technicien SIG - GPMDLR
Hors ligne
#2 Wed 18 October 2017 13:21
- babef eric
- Participant occasionnel
- Lieu: Agde
- Date d'inscription: 22 Jul 2010
- Messages: 21
- Site web
Re: ExtJS 3.4 - comboBox en cascade
Bonjour,
J'ai trouvé la solution à mon problème.
Je passe par un
SimpleStore
Je construis mon json d'une autre manière :
Code:
[[2,2,"agde"],[1,1,"cahm"],[2,3,"vias"]]
Et j'utilise un
filter
au lieu d'un
filterby
dans le
listeners
@+
Eric BABEF
Technicien SIG - GPMDLR
Hors ligne