#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