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 :

Avoir plusieurs instances [Prototype]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre actif

    Inscrit en
    Juin 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 229
    Points : 223
    Points
    223
    Par défaut Avoir plusieurs instances
    J'ai défini un objet à l'aide du script prototype.js, que je ne peut malheureusement instancier qu'une fois (vraiment très bizarre). Et je ne comprend pas pourquoi ...

    Mon objet :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    var Windows = Class.create();
     
    Windows.prototype = {
     
    	initialize : function(_Name,_Left,_Top,_Height,_Width) {
    		this.Name = _Name;
    		this.Bar_Name = this.Name+'Bar';
    		this.Min_Name = this.Name+'Min';
    		this.Close_Name = this.Name+'Close';
    		this.Left = _Left;
    		this.Top = _Top;
    		this.Height = _Height;
    		this.Width = _Width;
    		this.printW();
    		this.DOM = document.getElementById(this.Name);
    		this.DOM_Bar = document.getElementById(this.Bar_Name);
    		this.DOM_Min = document.getElementById(this.Min_Name);
    		this.DOM_Close = document.getElementById(this.Close_Name);
    		this.DOM_Bar.onmousedown = this.startDrag.bindAsEventListener(this);
    		this.DOM_Close.onclick = this.setHidden.bindAsEventListener(this);
    		},
     
    	printW : function() {
    		document.write('<div style="border-style:solid; border-width:1px; position: absolute; width: '+this.Width+'px; height: '+this.Height+'px; z-index: 1; left: '+this.Left+'px; top: '+this.Top+'px; padding-left:4px; padding-right:4px; padding-top:1px; padding-bottom:1px" id="'+this.Name+'"><div style="border-style:solid; border-width:1px; position: absolute; width: '+this.Width+'px; height: 17px; z-index: 1; left: -1px; top: -1px; padding-left:4px; padding-right:4px; padding-top:1px; padding-bottom:1px; background-color:#0000FF" id="'+this.Name+'Bar"><p align="right"><input type="button" value="_" id="'+this.Name+'Min"><input type="button" value="X" id="'+this.Name+'Close"></div></div>');
    		},
     
    	setVisible : function() {
    		this.DOM.style.visibility = 'visible';
    	},
     
    	setHidden : function() {
    		this.DOM.style.visibility = 'hidden';
    	},
     
    	setLeft : function(_left) {
    		this.DOM.style.left = _left;
    	},
     
    	setTop : function(_top) {
    		this.DOM.style.top = _top;
    	},
     
    	getLeft : function() {
    		return this.DOM.style.left;
    	},
     
    	getTop : function() {
    		return this.DOM.style.top;
    	},
     
    	startDrag : function(evt) {
    		window.lastX = evt.clientX;
    		window.lastY = evt.clientY;
    		// lance doDrag tant que l'on appuie sur le bouton de la souris en la bougeant
    		this.DOM_Bar.onmousemove= this.doDrag.bindAsEventListener(this);
    		// lance finirDrag quand on relache le bouton de la souris
    		this.DOM_Bar.onmouseup= this.endDrag.bindAsEventListener(this);
    	},
     
    	doDrag : function(evt) {
    		// Calcul de l'?cart de position de la souris
    		var difX=evt.clientX-window.lastX;
    		var difY=evt.clientY-window.lastY;
    		//R?cup?ration de la position du div et ajout de l'?cart de position de la souris
    		var newX1 = parseInt(this.getLeft())+difX;
    		var newY1 = parseInt(this.getTop())+difY;
    		// Assignation des nouvelles coordonn?es au div
    		this.setLeft(newX1+"px");
    		this.setTop(newY1+"px");
    		//Assignation de l'anci?nne position de la souris
    		window.lastX=evt.clientX;
    		window.lastY=evt.clientY;
    	},
     
    	endDrag : function(evt) {
    		this.DOM_Bar.onmousemove=null;
    	}
     
    }
    Cet objet simule en fait une fenetre dans le navigateur, avec seulement un drag&drop. Jusque la, tout va bien, le script fonctionne très bien sous firefox, et pas du tout sous IE, mais ça, j'ai plutot l'habitude.

    Le problème survient lorsque je souhaite instancier deux objets de type Windows. Le premier objet est très bien instancié, et a exactement le comportement souhaité, mais pour le deuxième, le debugger de firefox m'indique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Erreur : Windows is not defined
    Fichier Source : http://localhost/testjs/test.html      Ligne : 12
    Voici test.html, qui contient le code appelant :

    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
     
    <html>
    <head><TITLE>
    Page de test
    </TITLE>
    <SCRIPT language="javascript" src="./prototype/prototype.js"></SCRIPT>
    <SCRIPT language="javascript" src="./windows.js"></SCRIPT>
    <SCRIPT language="javascript">
    function start(){
    	var MyWindow = new Windows('MyWindow',10,10,200,200);
    	var oWindow = new Windows('oWindow',300,300,200,200);
    }
    </SCRIPT>
    </head>
    <body onload="js:start();">
    </body>
    </html>
    Voila, je ne comprend (une fois de plus) pas très bien pourquoi je ne peut pas instancier deux objets, donc si quelqu'un a une idée ...

    Merci !

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Essaie comme ceci déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var Windows = Class.create(); 
    Object.extend(Windows.prototype, {
       initialize: ........
       .........
    });
    Et si tu n'arrive pas à faire un truc basique avec un objet complexe (genre faire deux instances) alors essaie avec des objets plus simples...

  3. #3
    Membre actif

    Inscrit en
    Juin 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 229
    Points : 223
    Points
    223
    Par défaut
    J'ai trouvé pourquoi ce message d'erreur :

    dans la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     printW : function() {
          document.write('<div...
    remplace le code de la page par celui-ci et uniquement celui-ci. Le problème est que dans ce code, les objets ne sont pas "importés", et donc non défini. Je l'ai donc remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.body.innerHTML = document.body.innerHTML +'<div style=...
    voila et merci pour votre aide.

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    C'est un peu crado quand même. Vaudrait mieux passer par document.createElement !

  5. #5
    Membre actif

    Inscrit en
    Juin 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 229
    Points : 223
    Points
    223
    Par défaut
    Je ne la connaissais meme pas cette fonction !

    Non seulement c'est crado, mais en plus c'est dangereux car on peut rajouter les memes bout de code dans le HTML.

    Le problème c'est que je n'arrive pas à trouver une doc correcte (anglais ou français). Peut-être un bouquin ? ceux que j'ai lu pour l'instant ne me conviennent pas, mais ca va etre tres important que j'en trouve un, car la je pédalle dans la semoule sur des problèmes qui n'en sont pas ...

    Merci pour ton aide

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

Discussions similaires

  1. Avoir les instances de plusieurs classes
    Par BIREFKOUN dans le forum Web sémantique
    Réponses: 0
    Dernier message: 13/04/2013, 17h33
  2. Avoir plusieurs instances
    Par maxlpn dans le forum Administration
    Réponses: 2
    Dernier message: 07/09/2010, 16h55
  3. Réponses: 3
    Dernier message: 16/10/2003, 10h22
  4. Communiquer entre plusieurs instances d'applications
    Par bourinator dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/09/2003, 11h24
  5. [] plusieurs instances de form avec leur contexte ?
    Par Seb-31 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 11/04/2003, 13h56

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