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 :

objet appel externe et domready [MooTools]


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Par défaut objet appel externe et domready
    Bonjour à la cantonade,
    je veux appeller une fonction interne d'un objet mais avec domready (mootools)

    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
     
    function Formulaire() {}
    Formulaire.prototype = {
    	couleur_creation: undefined,	
    	init: function (coul_creation) {
    		this.couleur_creation = coul_creation;
    	        window.addEvent('domready', function() {this.pourCreation();});	
    	},
    	pourCreation: function() {
    		alert('creation');
           }
    }
     
    myform = new Formulaire();
    myform.init('#dcfbdc');
    Alors ca ne trouve pas le this.pourCreation()
    ce qui est normal car ca s'execute en dehors de l'objet
    j'ai essayé avec Formulaire.pourCreation();
    mais c'est pas mieux.

    Bien sur avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myform = new Formulaire();
    myform.init('#dcfbdc');
    window.addEvent('domready', function() {myform.pourCreation();});
    la ca marche, mais je ne suis plus dans l'objet...

    Auriez vous une solution. Merci!

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Bonsoir,
    il te faut encapsuler le fonction dans une fonction anonyme à laquelle tu passes ton objet en paramètre
    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
    Formulaire.prototype = {
      couleur_creation: undefined,
      init: function (coul_creation) {
        this.couleur_creation = coul_creation;
        // encapsulage dans fonction anonyme
        (function( obj){
          window.addEvent( 'domready', function(){
              obj.pourCreation();
            });
        })(this); // passage de this en parametre
      },
      pourCreation: function(){
          alert(this.couleur_creation );
        }
    }

  3. #3
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut
    Bonjour,

    Je ne suis pas sûr que la référence au domready puisse se faire à l'intérieur d'un objet.

    Votre seconde tentative est la bonne, il me semble. Voici comment je l'ai retravaillée :

    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
     
    function Formulaire() {}
     
    Formulaire.prototype = {
    	couleur_creation: undefined,	
    	init: function (coul_creation) {
    		this.couleur_creation = coul_creation;
     
    	},
    	pourCreation: function() {
    		alert(this.couleur_creation);
           }
    }
     
     
    myform = new Formulaire();
    myform.init('#dcfbdc'); 
     
    window.addEvent('domready', function() {
     
       myform.pourCreation();
     
    });
    J'ai bien précisé alert(this.couleur_creation);.


    Edit : Et bien on dirait que la version de NoSmoking fonctionne également.

  4. #4
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Par défaut
    Merci de vos rapides reponses.

    NoSmoking, j'aurai jamais trouvé ca tout seul, d'ailleurs, y aurait-il un tuto qui causerait de ces "encapsulage dans fonction anonyme" car j'avoue c'est un peu abstrait pour moi, je vois que ca marche, mais de la à comprendre le fonctionnement!

    J'ai d'autre part un 2eme probleme, presque similaire au précédant - appel d'une function interne à l'objet de l'exterieur, avec un bouton et son "onclick"

    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
     
    function Formulaire() {}
     
    Formulaire.prototype = {
    	ajax_file: 'myfile.php',
    	createButtons: function() {
    		if (document.getElementById('panelButtons')) {
    			inp = document.createElement('input');
    			inp.type = 'button';
    			inp.value = 'Modifier';
    			inp.id = 'btn_modify';
    			if (document.addEventListener) {
    				inp.addEventListener('click',this.pourModifier,false);
    			}	
    			else if (document.attachEvent) {
    				inp.attachEvent('click',this.pourModifier);
    			}		
    			document.getElementById('panelButtons').appendChild(inp);
                    }
            },
            pourModifier: function() {
                    alert(this.ajax_file);
            }
    }
    Quand je clique sur le bouton, je rentre bien dans la function "pourModifier"
    mais les variables sont undefined
    et le "alert" affiche "undefined"

    Avez vous une soluce?!!! Merci de votre aide.

  5. #5
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut
    Si l'on regarde votre premier exemple, vous initialisez votre variable avec this :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.couleur_creation = coul_creation
    Et on l'utilise également avec this :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(this.couleur_creation );
    Dans votre second exemple, vous initialisez la variable sans this :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ajax_file: 'myfile.php'
    Mais vous l'utilisez avec this :


  6. #6
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Par défaut
    non non c'est pareil
    j'ai essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	initAjax: function(file) {
    		this.ajax_file = file;
    	}
    ...
     
    myform.initAjax('myfile.php');
    C'est pareil
    j'ai toujours le alert qui renvoi "undefined"

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

Discussions similaires

  1. AfxBeginthread et objet Appelant
    Par -=zol=- dans le forum MFC
    Réponses: 2
    Dernier message: 29/11/2006, 15h12
  2. Connaitre l'objet appelant
    Par aurelien94 dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2006, 11h51
  3. [objet] appeler une méthode d'objets contenus dans un tableau (iterator ?)
    Par psychomatt dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/09/2006, 16h28
  4. Appel externe en PL/SQL
    Par maoboyindo dans le forum PL/SQL
    Réponses: 1
    Dernier message: 16/08/2006, 11h34
  5. base de données objet appelée ozone
    Par enti dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 01/03/2004, 08h28

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