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

JavaScript Discussion :

[POO] methode appelée dans la classe


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 96
    Points
    96
    Par défaut [POO] methode appelée dans la classe
    Bonjour

    je travail avec la librairie mootools.
    j ai une class UnConteneur qui me permet de créer une fenêtre (un div élaboré on va dire).
    J'ai une méthode onFocus qui lorsque on l'appelle modifie la couleur de mon objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    onFocus:function(){
    		if(!this.focus)
    			{
    			this.focus=true;
    			$(this.id).morph('.class_un_conteneur_principal_focus');
    			}
    	}
    lorsque je l'appelle à l extérieur de ma classe sur un objet cela fonctionne parfaitement.

    Par Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // test étant appelé lorsque l on clique sur un lien
    //monConteneur étant une instance de la classe UnConteneur 
    function test()
    	{
    	monConteneur.onFocus();
    	}
    Cependant je voudrais que lorsque l'on clique sur le div celui ci appelle la methode onFocus, j'ai donc fait de la manière suivante mais à fortiori sa ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // cette ligne ce trouve dans le constructeur
    //myDivPrincipal est le div qui est bien créé sur lequel je clique pour obtenir le focus
    //quand je clique j'obtiens une erreur qui est : this.onFocus is not a function
    myDivPrincipal.addEvent('click', function(){this.onFocus()});
    Je pense que le this ne referre pas au bon this... mais du coup je voit pas comment procéder...
    pouvez vous m'éclaircir.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDivPrincipal.addEvent('click', function(event){event.focus()});
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 96
    Points
    96
    Par défaut
    non ça ne peut pas être cela car onFocus est une méthode définis dans ma classe que je souhaite lancer

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDivPrincipal.addEvent('click', function(event){event.onFocus()});
    alors...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 96
    Points
    96
    Par défaut
    non plus car onfocus n'est pas une methode de event mais de UnConteneur

  6. #6
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var _cachedFunction = myDivPrincipal.onFocus
    myDivPrincipal.addEvent('click', _cachedFunction);
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par kimcharlene Voir le message
    non plus car onfocus n'est pas une methode de event mais de UnConteneur
    Dans les callbacks de gestionnaires d'événements de mootools, l'argument de la fonction anonyme (function(event)) fait référence à l'élément ayant déclenché l'événement.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Citation Envoyé par gwyohm Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var _cachedFunction = myDivPrincipal.onFocus
    myDivPrincipal.addEvent('click', _cachedFunction);
    ou plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var _cachedFunction = myDivPrincipal.onFocus.bindAsEventListener(myDivPrincipal)
    myDivPrincipal.addEvent('click', _cachedFunction);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myDivPrincipal.addEvent('click', myDivPrincipal.onFocus.bindAsEventListener(myDivPrincipal));
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Dans les callbacks de gestionnaires d'événements de mootools, l'argument de la fonction anonyme (function(event)) fait référence à l'élément ayant déclenché l'événement.
    Oo ok ça je ne savais pas.
    Donc l'élément OU je clique donc l'élément HTML?

    je vais regarder les réponse de gwyohm qui m'ont l'air fort interessante...
    Tout compte fait je comprend pas ce que tu fait dans ton dernier message...

  10. #10
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Citation Envoyé par kimcharlene Voir le message
    je vais regarder les réponse de gwyohm qui m'ont l'air fort interessante...
    Tout compte fait je comprend pas ce que tu fait dans ton dernier message...
    Je ne connais pas mootools, (j'utilise prototype mais ces 2 frameworks ont l'air ... "cousins").
    Dans prototype, bindAsEventListener (elle semble exister dans mootools) est une méthode ajoutée à l'objet function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function.prototype.bindAsEventListener = // le code du framework
    .

    En utilisant cette méthode sur une fonction, elle te renvoie une fonction qui a comme contexte "this" l'objet passé en parametre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function doSomething() {
      alert(this.innerHTML);
    }
    var foo = $("foo")
    foo.addEvent("click", doSomething.bindAsEventListener(foo));
    J'espere que ca aide...
    on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
    Pas de question technique par MP

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 96
    Points
    96
    Par défaut
    Merci je vient de trouver avec tes indices et tes explication

    en regardant la doc j'ai trouver la fonction similaire à prototype

    du coup j ai transformer en ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var _cachedFunction = this.onFocus.bindWithEvent(this);
    myDivPrincipal.addEvent('click', _cachedFunction);

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/07/2010, 14h13
  2. [C# 1.1] Fonction appelée dans plusieurs classes
    Par fregolo52 dans le forum C#
    Réponses: 1
    Dernier message: 25/10/2006, 09h36
  3. [DEBUTANT]methode manquante dans ma classe ?
    Par Battosaiii dans le forum Débuter
    Réponses: 3
    Dernier message: 25/08/2006, 11h56
  4. Réponses: 14
    Dernier message: 04/12/2005, 08h08
  5. [POO] Problème inclusion dans une classe
    Par LordBob dans le forum Langage
    Réponses: 11
    Dernier message: 22/11/2005, 15h21

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