IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ext JS / Sencha Discussion :

[ComboBox] Ajout d'un record après load


Sujet :

Ext JS / Sencha

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Par défaut [ComboBox] Ajout d'un record après load
    Bonjour,

    Je souhaiterais faire une chose assez simple.
    Il faudrait que je puisse ajouter un record "Tous" dans ma liste déroulante après que les données soient chargées.

    Je m'explique :
    J'utilise une comboBox à plusieurs endroits de mon site. A un endroit, cette comboBox me sert à enregistrer un formulaire, et à un autre endroit cette dernière me sert à filtrer selon une catégorie.

    Je voudrais donc pouvoir ajouter un record "Tous", uniquement après affichage de ma comboBox de recherche.
    Voici le code de ma comBox avec l'ajout de mon item :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    {
                xtype		: 'combo',
                id			: 'filterIndicatorsByType',
                itemId		: 'filterIndicatorsByType',
                store		: 'IndicatorTypes',            	
                fieldLabel	: 'Type ',
                labelAlign	: 'right',
                labelWidth	: 75,
                editable	: false,
                valueField	: 'criterion_id',
                displayField: 'criterion_code',
                listeners: 
                {
                       afterrender: 
                       {
                            fn: function (combo) 
                            {
                            	 combo.getStore().add({criterion_id : '25', criterion_code : 'test'});
                            }
                       }
               }
    }
    Mais ceci ne fonctionne pas.
    Néanmoins j'ai l'impression que le record supplémentaire s'affiche un court instant.

    Merci d'avance de vos réponses

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    bonjour

    une combo associé à un store affiche le contenu de ce store
    si tu modifie ce contenu quelque soit le composant qui l'affichera ensuite verra le nouveau contenu. c'est le principe même d'un datastore. séparer le contenu du contenant.

    Je pense que tu dois pouvoir faire le contraire
    mettre tous dans le datastore de façon permanente et utilise uncombobox avec les options filtering
    en agissant ainsi je pense qu'il doit être possible de ne pas afficher "tous" dans les combos qui ne doivent pas l'avoir en utilisant un filtre
    et l'afficher dans l'autre sans mettre de filtre

    A+JYT

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Par défaut
    Merci de ta réponse

    Je viens de tester et cela fonctionne très bien de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    {
              xtype			: 'combo',
              id				: 'serviceFamiliesCombo',
              queryMode		: 'local',
              store			: 'ServiceFamilies',
              displayField 	: 'criterion_code',
              valueField		: 'criterion_id',
              fieldLabel		: 'Famille :',
              emptyText		: 'Veuillez sélectionner une famille...',
              name			: 'service_family_id',
              flex			: 1,
              listeners		:
              {
              	//Don't display the value 'All'
                	expand : function(field)
                	{
                		field.store.filterBy(function(record, id) { return (record.get('criterion_id') != 0) ? true : false; });
                	}
                }
    Je filtre donc ma combobox sur expand afin d'enlever la valeur 'Tous' (id = 0) quand j'en ai pas besoin.

    NB : La valeur 'Tous' est insérée dans mon résultat SQL.

    Néanmoins, d'un point de vue "logique", cela me semblait + normal d'avoir un store regroupant les données de ma table, et d'ajouter la valeur supplémentaire 'Tous' dans des cas précis.

    Quelqu'un aurait-il une idée ?

  4. #4
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    tu n'as pas le choix
    soit tu affiche tout ce qu'il y a dans le store soit tu filtre

    si tu ajoute dans le store ça n'a rien à voir avec l'affichage tu l'a mis dans un store donc tu la stocké

    il te faut considérer ton store comme une table virtuelle

    tu n'ajoute pas une donnée dans une table juste parce que tu veux modifié un affichage.

    il existe une autre solution
    mais elle va changer le contenu de ton champs. I.E. tu ne maîtrise plus la valeur du champ pour "tous"

    il te faut utiliser l'option emptyText et allowBlank
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
      xtype        : 'combo',
      id           : 'serviceFamiliesCombo',
      queryMode    : 'local',
      store        : 'ServiceFamilies',
      displayField : 'criterion_code',
      valueField   : 'criterion_id',
      fieldLabel   : 'Famille :',
      emptyText    : 'Veuillez sélectionner une famille...',
      name         : 'service_family_id',
      emptyText    : 'tous',
      allowBlank   : true,
      flex         : 1
    }
    de cette façon tu garde ton datastore sans la valeur tous et ton combo contient l'élément "tous"

    mais si l’utilisateur le sélectionne ton champ reste vide tu ne peux pas lui attribuer de valeur
    A+JYT

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajout d'un JScrollPane "après coup"
    Par 13mike dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 20/07/2007, 16h29
  2. Ajout d'un record dans un DataTable
    Par belzeluc dans le forum Windows Forms
    Réponses: 10
    Dernier message: 21/06/2007, 12h42
  3. [ComboBox] Ajouter plusieurs lignes
    Par kalou26 dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/06/2006, 20h22
  4. [MySQL] Ajout d'un record dans une base de donnees
    Par barthelv dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/03/2006, 16h03
  5. Réponses: 9
    Dernier message: 14/10/2005, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo