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

Bibliothèques & Frameworks Discussion :

Portée de "this" dans une fonction [Dojo]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre régulier Avatar de Zineb1987_UNI
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 74
    Points
    74
    Par défaut Portée de "this" dans une fonction
    Bonjour à tous,
    dans MaClass j'ai une fonction resizeColumn dont je gère le redimensionnement des colonnes d'une GridContainer, le contenu de la fonction je fait l'appel a this.currentColumn pour recuperer le colonne courant que je redimentionne,mais aussi j'ai besoin d'appeler une autre fonction de MaClass et je fait this.autreFonction, alors que this contient l'objet qui fait appel la fonction c-à-d le GridConatiner et pas MaClass.
    s'il vous plait comment je peux gerer ca ?
    et Merci

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Il faut que tu crées une variables qui pointe sur la référence de ta class (son this) et que tu utilises cette variable dans ta fonction.

    Mais je ne vois pourquoi tu esconfronté à ce type de problème avec ce que tu rapportes (ce n'est ps limpide) . Peux tu poster ton code ?

    ERE

  3. #3
    Membre régulier Avatar de Zineb1987_UNI
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 74
    Points
    74
    Par défaut
    merci emmanuel.remy,
    voila mon code :
    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
    dojo.declare(
                "maClass",
                dijit._Widget,
                {
                       ....
                    resizeColumn:function () {
                        //recuperer l'id de la colonne redimmensionnee
                        //this ici = le widget GridContainer
                        var selecteur = "#" + this.currentColumn.getAttribute("idsouszone");
                        console.log('selecteur :',selecteur);
                       //alors que la je veux faire appel d'un nouvelle fonction de maClass qui est getCssRule, alors qu'il marche pas car this tjr pointe sur le GridContainer
                        var proprietes = this.getCssRule(selecteur);
                    },
                     getCssRule:function (selecteur) {
                       ......
                     }
    et Merci

  4. #4
    Membre régulier Avatar de Zineb1987_UNI
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    Salut,

    Il faut que tu crées une variables qui pointe sur la référence de ta class (son this) et que tu utilises cette variable dans ta fonction.

    ERE
    tu veux dire comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    dojo.declare(
                "maClass",
                dijit._Widget,
                {
                 //declaration
                   _objCurrent: null,
                 constructor: function (params...) {
                    //initialisation
                     this._objCurrent = this;
                    ....
                },

  5. #5
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Oui c'est la solution.
    Mais n'empêche que je ne comprends toujours pas ton souci et comment ta fonction resizeColumn de ta class arrive à s'exécuter dans le contexte de la grid (ce n'est pas impossible mais il faut le faire volontairement).

    ERE

  6. #6
    Membre régulier Avatar de Zineb1987_UNI
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    Salut,

    Oui c'est la solution.
    Mais n'empêche que je ne comprends toujours pas ton souci et comment ta fonction resizeColumn de ta class arrive à s'exécuter dans le contexte de la grid (ce n'est pas impossible mais il faut le faire volontairement).

    ERE
    ben c'est normal je vais t'expliquer :
    voila comment je fait l'appel a ma fonction resizeColumn >
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dojo.connect(monGrid, "resizeColumnOff", null, this.resizeColumn);
    alors la fonction s'execute pour chaque redimentionnement du GridContainer, c'est pour ca que le contexte ici = gridContainer.

  7. #7
    Membre régulier Avatar de Zineb1987_UNI
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 74
    Points
    74
    Par défaut
    bon pour la solution (creation d'une variable _objCurrent: null) ca marche pas !
    alors j'ai régler le problème en déclarant une variable en dehors de la class par (var current) puis je fait son initialisation dans le constructeur, et ca marche bien.
    et Merci pour une autre fois emmanuel.remy.

  8. #8
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Où là là ! J'ai bien fait de te dire que je ne voyais pas où tu voulais en venir !

    Tu n'as pas besoin de créer une variable; il suffit de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dojo.connect(monGrid, "resizeColumnOff", this, "resizeColumn");
    ERE

  9. #9
    Membre régulier Avatar de Zineb1987_UNI
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 74
    Points
    74
    Par défaut
    ben Merci pour l'info alors que j'ai toujours besoin de cette variable car j'ai ce problème dans plusieurs fonction .

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

Discussions similaires

  1. Le this dans une fonction privée
    Par GalliezB dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/01/2014, 23h56
  2. this dans une fonction anonyme
    Par Paul TOTH dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 11/01/2012, 13h23
  3. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  4. [Prototype] Portée de this dans une classe
    Par grunk dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 07/04/2009, 14h58
  5. [ADODB] portée d'une transaction dans une fonction
    Par grabriel dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/08/2008, 09h19

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