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 :

[MVC] Passer une variable entre 2 controllers ?


Sujet :

Ext JS / Sencha

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut [MVC] Passer une variable entre 2 controllers ?
    Bonjour à tous,

    j'ai dans ma vue principale une TreeGrid dans laquelle j'ai une ActionColumn qui ouvre une fenêtre.
    Cette fenêtre contient une grid qui pour se remplir attend 2 valeurs, et un bouton OK.

    Actuellement je fais dans mon TreeGrid:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var foldername  = record.get('name');
    var json_id     = record.get('id'); 
    if ((!Ext.isEmpty(foldername)) && (!Ext.isEmpty(json_id))) {
        // Afficher la fenêtre DoSharing;
        var myModalWindow = Ext.create('MonAPP.view.sharing.DoSharing', { 
            title: 'Share my Folder: ' + foldername
        }).show();
        MonAPP.app.getController("sharing.DoSharing").fillGrid(foldername, json_id);
    }
    Ma fenêtre qui contient la Grid, possède une procédure pour remplir ma grille fillGrid à laquelle je passe 2 paramètres.

    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
            onOkClick: function () {
     
            console.log('je click'); <==== Affiche 2 fois ?
        },
     
    fillGrid: function(foldername, json_id) {
            var myGridSharing = this.getRefGridSharing();
     
            myGridSharing.getStore().load({
                scope: this,
                params: { 
                    folder  : foldername,
                    json_id : json_id
                },                
                callback: function(records, operation, success) {
                    if (success) {
     
                    }
                }
            });        
        }
    Alors voici mon problème, lorsque je clique sur le bouton OK de la fenêtre qui contient la Grid, cela execute 2 fois le onOkClick ??!!
    Savez vous pourquoi ? Une piste, cela provient surement du getController() car si je ne rempli pas ma Grid alors le onOkClick ne se lance qu'une seule fois.
    Pour info: fillGrid() ne se lance bien qu'une seule fois.

    Comment faire pour passer mes 2 variables du controller de mon TreeGrid au controller de ma Grid sans utiliser getController() ?

    D'avance merci pour vos conseils !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    J'ai trouvé une solution grâce à ce lien:

    http://www.sencha.com/forum/showthre...d-twice....why

    J'ai essayé la méthode où le init ne fait rien (fin du post).

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

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    je n'ai pas tout compris mais voici comment je fais

    1) une vue n'a qu'un et qu'un seul contrôleur.
    2) une vue n'a aucun code pour gérer un quelconque événement.
    3) seul le contrôleur associé à la vue gère les événements de la vue.

    4) le contrôleur est observable, il peux lancer des événements de haut niveau (ex: beforeUpdateUser)
    5) les contrôleurs peuvent s'abonner aux événements des autres contrôleurs.

    6) les échange de données entre contrôleur se font via un événement.

    A+JYT

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Bonjour sekaijin,

    Oui je suis d'accord avec toi, et je me force à appliquer/respecter scrupuleusement tous les points que tu cites !

    Merci pour tes commentaires

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

Discussions similaires

  1. Erreur pour passer une variable entre formulaire
    Par georgesasc dans le forum IHM
    Réponses: 0
    Dernier message: 07/09/2010, 15h06
  2. Passer une variable entre 2 GUI
    Par mihaispr dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 02/05/2009, 14h48
  3. Passer une variable entre 2 fonctions
    Par mihaispr dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/03/2009, 20h12
  4. passer une variable entre deux classes as3
    Par sanatou dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 27/06/2008, 21h52
  5. Passer une variable entre deux fenêtres
    Par DeezerD dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/08/2005, 09h52

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