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] Conception et AddEvent


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut [POO] Conception et AddEvent
    Bonjour,

    Je suis sur un problème plutôt de conception et j'aimerais savoir si vous pourriez m'aider à le résoudre.

    J'ai une classe qui créer un objet, jusque là tout va bien.

    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
     
    /* Constructor */
    function OASCaller(pos,lang)
    {
    	//Private vars declaration
    	this.OASPositions			= new String();
    	this.OASUrl						=	new String();
    	this.OASLanguage				= new String();
    	this.OASVersion				= new Number();
    	this.OASSitePage				= new String();
    	this.OASRandomNum			= new String (Math.random()).substring (2, 11);
    	this.OASCreatedObject	= new String();
     
    	//Private vars default init
    	this.OASPositions		= pos;
    	this.OASUrl					= this.getOASUrl();
    	this.OASVersion			= this.getOASVersion();
    	this.OASSitePage	= this.getOASSitePage();
    	this.setOASLanguage(lang);
     
    	checkPos = this.checkPositions();
    	if(checkPos)
    	{
    		this.InitEvents();
    	}
    }

    J'essaye alors d'implémenter la fonction AddEvent(Listener) afin de charger des fonctions de mon objet à la fin du chargement de la page.

    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
     
    OASCaller.prototype.InitEvents = function()
    {
    	OASCaller.addEvent(window,'load',this.loadEventsCallBAck);
    }
     
    OASCaller.addEvent = function( obj, type, fn )
    {
    	if (obj.addEventListener)
    		obj.addEventListener( type, fn, false );
    	else if (obj.attachEvent)
    	{
    		obj["e"+type+fn] = fn;
    		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
    		obj.attachEvent( "on"+type, obj[type+fn] );
    	}
    }
    Mon souci est que je ne peux pas mettre la référence this dans mon appel de fonction d'objet dans la call back

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    OASCaller.prototype.loadEventsCallBAck = function()
    {
            this.setBannerInHtmlElement()
    	alert(document.getElementById('Right1'));
    }
    car this.setBannerInHtmlElement() fonctionne mais me renvoi une erreur d'exécution js dans firebug.

    Pour que celà fonctionne je dois appeller cette fonction avec l'instance de mon objet déclaré : myOASCaller.setBannerInHtmlElement().

    Hors je ne peux décemment pas utiliser çà en POO.

    J'espère avoir bien expliqué mon problème.

    En espérant que quelqu'un puisse m'aider.

    Merci beaucoup.

    Yudao.

  2. #2
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    C'est une erreur ou une exception?

    Tu as fais un console.log de this?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Voici le retour dans firebug :

    uncaught exception: [Exception... "Could not convert JavaScript argument" nsresult: "0x80570009...

    Yudao.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bon après multitudes de test, je vois ou çà coince mais je ne connais pas de solution (pb de conception) :

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    OASCaller.prototype.InitEvents = function()
    {
      this.addEvent(window,'load',this.setBannerInHtmlElement());
    }
    J'ai l'exception et ma fonction est lancé de suite.

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    OASCaller.prototype.InitEvents = function()
    {
      this.addEvent(window,'load',this.setBannerInHtmlElement); //sans parenthèses
     }
    MA fonction s'éxecute bien en fin de load, mais il ne reconnait plus alors le this.

    Yudao.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    En fait je dois récupérer dans une fonction de callback les propriétés et méthodes de mon objet.

    J'aimerais que tout soit fait à l'intérieur de ma classe OASCaller, mais si ce n'est pas possible alors je ferais autrement, mais je coince :d.

    Yudao.

  6. #6
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    C'est normal, c'est les paramètres this est passé de manière implicite, tu dois utiliser la méthode sans paranthèses

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Oui mais ensuite dans ma fonction de call back je n'ai plus accès au this.

    C'est là mon problème

    Yudao.

  8. #8
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    Citation Envoyé par yudao
    Oui mais ensuite dans ma fonction de call back je n'ai plus accès au this.

    C'est là mon problème

    Yudao.
    En principe this fera référence à l'element qui trigger l'event

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Oui justement 'est pour celà que je pense que c'est un problème de concpetion

    Donc comment arriver à lancer une méthode d'objet depuis une fonction de callback à l'intérieur de l'objet lui même.

    M'est avis que je dois faire l'appel ailleurs...

    Sinon y'a un truc que je comprends encore moins. Si je laisse l'appel avec l'instance de ma variable pour tester ma classe, çà fonctionne bien sous FF, mais pas sous IE, là je pourrais comprendre, mais c'est une erreur d'appel et là je comprends pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <script type="test/javascript" src="OASCaller.class.js"></script>
    <script type="test/javascript">
    	var myOASCaller = new OASCaller('Right1','IT');
    	myOASCaller.OASVersion = 9;
    </script>
    Marche bien sous FF mais sous IE j'ai un beau "OASCaller est indéfini"...
    Alros que ma classe est instancié au dessus...

    Yudao.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Désolé pour le post inutile, c'et que j'avais des

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const mConst = 'bla bla';
    Et çà IE n'aime pas. Il préfère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var mConst = 'bla bla';
    Va savoir...

    Par contre je suis toujours preneur d'une solution de conception pour ce que j'ai besoin de faire

    Merci.

    Yudao.

Discussions similaires

  1. [POO] Conception de beans
    Par mithrendil dans le forum Autres
    Réponses: 2
    Dernier message: 20/12/2007, 15h30
  2. [POO] conception d'un logiciel de dessin vectoriel
    Par rodymary dans le forum VB.NET
    Réponses: 8
    Dernier message: 01/12/2007, 01h33
  3. [POO] Concept général
    Par delphi+ dans le forum Delphi
    Réponses: 5
    Dernier message: 28/02/2007, 16h49
  4. [POO] Conception d'un système de template
    Par iwf-fr dans le forum Langage
    Réponses: 8
    Dernier message: 06/02/2007, 13h29
  5. [POO] conception des classes
    Par poukill dans le forum C++
    Réponses: 229
    Dernier message: 19/07/2006, 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