Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Ext JS / Sencha
Ext JS / Sencha Ext JS / Sencha Forum d'entraide sur les frameworks Ext JS et Sencha. Avant de poster : FAQ ExtJS / Sencha, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/11/2010, 14h34   #1
Membre à l'essai
 
Inscription : juin 2007
Messages : 70
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 70
Points : 23
Points : 23
Par défaut Construire la liste des valeurs d'une combo

Bonjour à tous,

J'ai un formulaire contenant 2 comboBox(type_risque et facteur).
J'ai un JsonStore avec 3 champs (Numéro, type_risque, facteur).
Je dois présenter les valeurs "facteur" de ce JsonStore dans la seconde combo mais je ne parviens pas à en construire la liste car elle dépend du choix effectué dans la première combo.
En effet, la liste des "facteurs" est fonction du "type_risque".

J'ai lu des posts à propos de "query" mais je ne les comprends pas. Comment puis-je faire ?

merci de votre aide
cordialement
MadMax4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 14h54   #2
Membre éclairé
 
Avatar de JulienFio
 
Julien Fiorentino
Inscription : novembre 2007
Messages : 201
Détails du profil
Informations personnelles :
Nom : Julien Fiorentino
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : novembre 2007
Messages : 201
Points : 336
Points : 336
Bonjour,

Si j'ai bien compris ce que tu souhaites faire, le principe serait le suivant:

-dans ta première combo tu as ton JSON type_de_risque déjà alimenté lors du render de ton formPanel.

- dans ta deuxième combo tu n'as rien par defaut, elle est seulement renseigné si tu choisis un type_de_risque.

Si c'est bien ça, voici comment tu pourrais procéder:

tu définis un event sur ta première combo qui va charger la liste de la deuxième en fonction de la valeur choisie:
Code :
1
2
3
4
 
Ext.getCmp('firstCombo').on('select', function(combo, record, index){
storeSecondCombo.load({params:{type_de_risque: Ext.getCmp('secondCombo').getRawValue()}})
});
lorsque tu vas selectionner une valeur dans ta premiere combo ça va te recharger le store de ta seconde combo avec comme paramètre la valeur type_de_risque.

Pour que cela fonctionne tu dois avoir deux store distinct, pour les deux combos
JulienFio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 16h58   #3
Membre à l'essai
 
Inscription : juin 2007
Messages : 70
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 70
Points : 23
Points : 23
Merci de ton aide JulienFio

je n'y arrive pas.
Je reformule :

La première combo est chargée avec les valeurs "Type de risque".
Valeurs en faible nombre qui se trouvent dans la colonne 2 de mon JsonStore.

La seconde combo doit fournir la liste des valeurs "facteur" (3ième colonne du JsonStore) en fonction du choix fait dans la première combo.
en effet, on a dans le jsonstore des triplets du genre :
1 - toto- a
2 - toto - b
3 - toto -c
4 - juju - k
5- juju - m
...

donc si toto est choisi dans le type de risque, je souhaite obtenir les 3 valeurs : a, b et c dans ma seconde combo.
MAIS si aucun choix n'est effectué dans cette première combo, je dois fournir toutes les valeurs de la colonne "facteur" !

Pour l'instant, j'ai déjà du mal à fournir à ma seconde combo toutes les valeurs du JsonStore, juste pour essayer.

Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
var r_facteur = new Ext.data.JsonReader({}, [ 'code_f', 'type', 'lib_f']);  
var Facteur = new Ext.data.JsonStore({
			url: 'facteur.php',
			fields: ['code_f', 'type','lib_f'],
			reader:r_facteur,
			autoLoad: true
		});
...
 
{
xtype: 'combo',
id: 'facteur', fieldLabel: "Facteur de risque générique", emptyText: "Facteur de risque",
store: Facteur,
displayField: 'lib_f', valueField: 'code_f', selectOnFocus: true,
mode: 'local', typeAhead: true, editable: false, triggerAction: 'all', 
width : 678, maxHeight : 80, 	value: ''},
ce bout de code ne donne rien dans la seconde combo ! pourtant je reçois bien une réponse du serveur.
Qu'est-ce qui ne colle pas ?

Désolé d'avoir été si long, merci de ta patience
MadMax4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 18h25   #4
Membre éclairé
 
Avatar de JulienFio
 
Julien Fiorentino
Inscription : novembre 2007
Messages : 201
Détails du profil
Informations personnelles :
Nom : Julien Fiorentino
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : novembre 2007
Messages : 201
Points : 336
Points : 336
Ok, c'est déjà plus clair là.

Tu peux déjà commencer par enlever le reader deton JsonStore:
Code :
1
2
3
4
5
6
var Facteur = new Ext.data.JsonStore({
			url: 'facteur.php',
			fields: ['code_f', 'type','lib_f'],
			reader:r_facteur, // Inutile
			autoLoad: true
		});
tu peux aussi supprimer la déclaration de r_facteur, tes paramètres 'url' et 'fields' de ton JsonStore suffisent.

Pour la combo, essayes d'enlever le paramètre
et essayes aussi de ne pas utiliser l'autoload sur le store, mais fais un load "manuellement".

Pas sûr que ça résolve ton problème mais sait-on jamais.

Si ça fonctionne et que ta combo est alimentée, ensuite reprend ce que j'ai dit dans le précédent message. C'est à dire de te servir de l'Event 'select' sur ta première combo pour filtrer tes facteurs. Seulement, comme tu utilise un même store pour les deux combos, je crains que ça ne te filtre les deux combos...

Selon moi, deux store distinct serait plus pratique
JulienFio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2010, 15h51   #5
Membre à l'essai
 
Inscription : juin 2007
Messages : 70
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 70
Points : 23
Points : 23
Merci beaucoup Julien

ça marche !
Grâce à toi, j'ai compris la logique des combo en cascade.
j'ai même essayé le "data.filter" qui marche très bien.

Pour le problème sur le jsonStore, mystère ! De dépit, je l'ai remplacé par un SimpleStore et là, ça a fonctionné.

En tout cas merci de ton aide.
madMax
MadMax4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2010, 14h26   #6
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 417
Points : 2 803
Points : 2 803
Par défaut il existe des cascading combobox pour ça

Salut
http://wiki.meow.fr/ExtJS,_Cascading_ComboBox
http://www.sencha.com/forum/showthre...bo-Box-Example
http://www.sencha.com/forum/showthre...ading-ComboBox
http://www.sencha.com/forum/showthre...ditorGridPanel

bref inutile de réinventer la roue

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h55.


 
 
 
 
Partenaires

Hébergement Web