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 :

récupérer les données d'un jsonWriter


Sujet :

Ext JS / Sencha

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 27
    Points
    27
    Par défaut récupérer les données d'un jsonWriter
    Bonjour à tous,

    J'ai un formulaire avec 3 champs et un tableau. Une fois le tout rempli on valide. Je récupère les valeurs de mes 3 champs sans problème, où ça se complique c'est pour le tableau. Je remplis le tableau avec les données sous json, j'aurais voulu les sortir sous le même format. Mais j'arrive pas à récupérer les données.

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    var jsonTab = ".$current_num->getJsonTab($current_num->getDefaultTabNum()).";
     
    var reader = new Ext.data.JsonReader({
    	idProperty: 'id_act',
    	fields: [
                     //les champs			
    		]
    });
     
    var writer = new Ext.data.JsonWriter({
    	encode: true,
    	writeAllFields: false
    });		
     
    var store = new Ext.data.GroupingStore({
            reader: reader,
    	writer: writer,
            data: jsonTab,
    	sortInfo: {field:'id_disc', direction:'ASC'},			
            groupField: 'discipline'
    });		
     
    function  fct_submit() {
    	formCreationListe.form.submit({});
    };
     
    var formCreationListe = new Ext.FormPanel({
    	labelWidth: 75,
    	width: 960,
    	standardSubmit: false,
    	method: 'POST',
    	url: 'index.php?page=ajout_liste',
    	frame:true,
    	title: '...',
    	renderTo:'formCreationListe',
    	bodyStyle:'padding:5px 5px 0',
    	defaultType: 'textfield',
    	labelWidth: 200,
    	items: [{
    		fieldLabel: 'Name ',
    		name: 'nom',
    		allowBlank:false,
    		width: 250
    		},new Ext.form.ComboBox({
    			typeAhead: true,
    			triggerAction: 'all',
    			transform: 'selectPj',
    			name: 'selectPj',
    			editable: false,
    			fieldLabel: 'Project ',						
    			lazyRender: true,
    			listClass: 'x-combo-list-small',
    			width: 250
    		}),{
    		fieldLabel: 'Colonnes (séparées par ;) ',
    		name: 'colonnes',
    		width: 250				
    		},new Ext.grid.EditorGridPanel({
    			store: store,
    			columns: [
                            //colonnes du grid
    			],
    			view: new Ext.grid.GroupingView({
    				forceFit: true,
    				showGroupName: false,
    				enableNoGroups: false,
    				enableGroupingMenu: false,
    				hideGroupedColumn: true
    				}),					
    			autoExpandColumn: 'activite',
    			title: 'Numerotation',
    			height: 400
    			})
    		],
    	buttons: [{
    		text: 'Validate',
    		handler : fct_submit
    		}]
    	});
    Merci, bonne journée.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Bon j'ai toujours pas trouvé comment récupéré le résultat de mon store avec le writer. Du coup je suis passé pas une autre méthode qui n'est pas du tout optimisé et évolutive, je boucle sur le store pour sortir les données et construire une chaine.

    Du coup autre problème qui surgit, lors de la validation du formulaire. Dans mon formPanel quand je défini la propriété "standardSubmit" à false je récupère bien ma chaine. Par contre quand je suis en "standardSubmit: true". Pas moyen de récupérer ma chaine en POST.


    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
    24
    25
    26
    27
    28
    29
     
    		function  fct_submit() {
    			var jsonRtn = '';
     
    			store.each(function(store){
    				jsonRtn += '{".$guillemets."id_disc".$guillemets.": ' + store.data.id_disc + ',' + '".$guillemets."id_act".$guillemets.": ' + store.data.id_act + ',' + '".$guillemets."plageDeb".$guillemets.": ' + store.data.plageDeb + ',' + '".$guillemets."plageFin".$guillemets.": ' + store.data.plageFin + ',' + '".$guillemets."discipline".$guillemets.": ' + store.data.discipline + ',' + '".$guillemets."id_activite".$guillemets.": ' + store.data.activite + '},';
    			});
     
    			var myParams = {
    				gridStore: jsonRtn
    			};
     
    			formCreationListe.form.submit({
    				params: myParams
    			});
    		};
     
    		var formCreationListe = new Ext.FormPanel({
    			labelWidth: 75,
    			standardSubmit: true,
    			method: 'POST',
    			url: 'index.php?page=ajout_liste',		
    			frame: true,			
    			title: '...',
    			renderTo:'formCreationListe',
    			bodyStyle:'padding:5px 5px 0',
    			defaultType: 'textfield',
    			labelWidth: 200,
    			items: [{ //etc...
    J'espère que quelqu'un saura le pourquoi du comment, même si je ne désespère pas de trouver la solution aux deux problèmes

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 330
    Points
    330
    Par défaut
    Bonjour,

    c'est une belle problématique ...

    je te conseillerais de créer une variable ma_chaine... et de créer un event 'change' dans ton tableau ...
    à chaque modification de ton tableau ... tu remplit ta variable ma_chaine.

    et lorsque l'utilisateur clique sur submit, tu récupères ta chaine ... et la mets dans un champ invisible de ton formulaire ... et tu renvoi le tout en post ...


    voila, bon courage ...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Hi,

    Du coup le jsonWriter sert à rien si on ne va pas chercher en directe les fichiers php pour les insertions, arf dommage.

    Pour ce qui est du champ vide, j'avais essayé en créant un champs dans mon formulaire, mais j'ai pas réussi à mettre ma variable jsonRtn dans ce champ lors de ma fonction submit

    Dans ma fonction, j'ai essayé plusieurs écriture mais... C'est dans ce domaine d'extJS que pêche, la combinaison des objets/propriétés...

    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
     
    		function  fct_submit() {
    			var jsonRtn = '';
     
    			store.each(function(store){
    				jsonRtn += '{".$guillemets."id_disc".$guillemets.":' + store.data.id_disc + ',' + '".$guillemets."id_act".$guillemets.":' + store.data.id_act + ',' + '".$guillemets."plageDeb".$guillemets.":' + store.data.plageDeb + ',' + '".$guillemets."plageFin".$guillemets.":' + store.data.plageFin + ',' + '".$guillemets."id_prefixe".$guillemets.":' + store.data.id_prefixe + ',' + '".$guillemets."discipline".$guillemets.":' + '".$guillemets."' + store.data.discipline + '".$guillemets."' + ',' + '".$guillemets."activite".$guillemets.":' + '".$guillemets."' + store.data.activite + '".$guillemets."' + ',' + '".$guillemets."prefixe".$guillemets.":' + '".$guillemets."' + store.data.prefixe + '".$guillemets."' + '},';
    			});
     
    			var myParams = {
    				gridStore: jsonRtn
    			};
     
                            //et là ça va plus ...
    			formCreationListe.form.monChamp.value = jsonRtn;
     
    			formCreationListe.form.submit({
    				params: myParams
    			});
    		};
    En tout cas merci.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Après avoir lus des tonnes de topic, du coup j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ext.getElementById('monChamp').value=maChaine;
    Mais ça me retourne comme erreur : Ext.getElementById is not a function

    L'erreur avec mon ancien code : formCreationListe.form.monChamp is undefined

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 330
    Points
    330
    Par défaut
    ola ...
    Ext.getElementById('monChamp').value=maChaine;

    ca n'existe pas ...
    normal que ca ne marche pas ...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    J'ai vus ceci dans une autre discution, sauf qu'au lieu de "ext." il y avait "document." ce qui reste obscure...

    Enfin, je continue mes recherches.

    Edit : c'est obscure mais ça marche, par contre est ce qu'il serait possible d'avoir une petite explication ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 330
    Points
    330
    Par défaut
    document.getElementById('monChamp').value=maChaine;
    => ca existe ...
    "document" est une variable globale en javascript ... elle est comprise par tous les navigateurs ... meme IE ( mais a sa manière ... )

    alors, je te déconseille d'utiliser "document.getElementById...", parce que la syntaxe diffère en fonction des navigateurs ...
    Si tu mets un id dans ton champ Ext, par exemple id:'prenom'

    alors tu peux retrouver ton champ avec le code suivant:
    Ext.getCmp('prenom') ...

    Alors pour remplir un champ, je fais comme ca ... :
    je chope l'id du formulaire exemple "mon_formulaire"
    et je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ext.getCmp("mon_formulaire").getForm().findField('prenom').setValue("TsunamiDream")

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    C'est déjà plus clair.

    J'ai fais la modif du coup je me retrouve avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ext.getCmp('hidden').setValue(jsonRtn);
    En tout cas merci, une fois de plus

  10. #10
    Membre régulier
    Profil pro
    rfv
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : rfv

    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Points : 115
    Points
    115
    Par défaut
    j'ai toujours pas trouvé comment récupéré le résultat de mon store avec le writer.
    Même problème résolu en changeant la valeur "encode" et du coups j'ai enfin obtenu une variable (l'élément root du store) qui contenait le flux XML (à la place d'être dans le corps du POST)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	// The new DataWriter component.
    	var writer = new Ext.data.JsonWriter({
    //	    encode: false   // <-- don't return encoded JSON -- causes Ext.Ajax#request to send data using jsonData config rather than HTTP params
    		encode: true
    	});
    Et pour les retours voir : ExtJS ext.data.jsonwriter :
    http://heratech.net/blog/sham/extjs-...er-and-cakephp

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/01/2006, 12h33
  2. XMLHttpRequest : Impossible de récupérer les données
    Par laurent_ifips dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 22/11/2005, 13h28
  3. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39
  4. Récupérer les données interbase dans une TStringGrid
    Par Ousse dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/03/2005, 12h51
  5. Récupérer les données d'une iframe
    Par juli1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/02/2005, 22h53

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