Actions

Cours

« Technologies avancées du eLearning 2/exercices/Équipe » : différence entre les versions

De GBLL, TAL, ALAO, etc.

Ligne 106 : Ligne 106 :


nomEq(){
nomEq(){
//renvoie la chaine de caractère contenu dans l'élément h1 pointé par this.nom
 
 
}
}


nbMembres(){
nbMembres(){
//renvoie le nombre d'enfant de l'élément ul pointé par this.listeMembres
 
 
}
}



Version du 29 janvier 2019 à 13:58

Test de votre classe

Créer un document HTML avec le contenu suivant, en veillant à adapter :

  • la ligne n°5 en fonction du nom de votre fichier javascript ;
  • la ligne n°9 en fonction de votre fichier de logo.
<!doctype html>
<html>
   <head>
      <meta charset="utf-8" />
      <script type="text/javascript" src="equipe.js"></script>
      <link type="text/css" rel="stylesheet" href="style.css" />
      <script type="text/javascript">
		function init(){
			var monEquipe = new Equipe("DILIPEM", "logo.svg") ;
			//Test de la méthode nomEq()
			if(monEquipe.nomEq() == "DILIPEM"){
			   console.log("Bravo nomEq() marche.");
			}
			else{
			   console.error("Attention à la méthode nomEq() (ou au constructeur)");
			}
			//test de la méthode nbMembres()
			if(monEquipe.nbMembres() === 0){
			   console.log("Bravo, il y a des chances que nbMembres() fonctionne");
			}
			else{
			   console.error("Attention à nbMembres (ou au constructeur)");
			}
			//test de l'ajout de membres
			monEquipe.ajoutMembre("Jean-Pierre") ;
			monEquipe.ajoutMembre("Jacqueline") ;
			if(monEquipe.nbMembres() === 2){
			   console.log("Bravo, il y a des chances que nbMembres() et ajoutMembre() fonctionnent.");
			}
			else{
			   console.error("Attention à nbMembres (ou à nbMembres)");
			}
			var elt = document.getElementsByTagName('body')[0];
			console.log(elt);
			elt.innerHTML = monEquipe.toHTML();
		}
		window.onload=init;
      </script>
   </head>
   <body>
   </body>
</html>

Version "modèle"

class Equipe{
   constructor(nomEq, logo){
      this.nom = nomEq;
      this.logo = logo;
      this.listeMembres = []
   }

   nomEq(){
      return this.nom;
   }

   nbMembres(){
      return this.listeMembres.length;
   }

   ajoutMembre(nom){
      this.listeMembres.push(nom);
   }

   toHTML(){
		var res = "<article>\n\t<h1><img src='"+this.logo+"' />"+ this.nomEq()+"</h1>\n\t<ul>" ;
		for(let i=0;i<this.nbMembres();i++){
			res += "\n\t\t<li>"+this.listeMembres[i]+"</li>";
		}
		return res + "\n\t</ul>\n</article>";
	}
}

Version DOM

On veut maintenant que notre classe ne manipule plus des types simples, mais directement les éléments du DOM, ce qui permettra de s'assurer que la représentation du document HTML est toujours cohérente avec l'objet concerné.

Le code de test reste le même sauf la ligne 35 elt.innerHTML = monEquipe.toHTML(); qui doit être supprimée.

class Equipe{
	constructor(nomEq, logo, parentId){
		//on récupère l'élément parent d'après parentId
		var parent = document.getElementById(parentId),
			//on vérifie qu'il existe
			 res = (parent != null) ;
		if(res){
			this.elt = document.createElement("article");
			parent.appendChild(this.elt);
			this.logo = document.createElement("img");
			this.logo.src = logo ;
			this.logo.style="float:left; height:64px;margin-right:1em;";
			this.elt.appendChild(this.logo);
			this.nom = document.createElement("h1");
			this.nom.innerHTML = nomEq;
			this.elt.appendChild(this.nom);
			this.listeMembres = document.createElement("ul");
			this.elt.appendChild(this.listeMembres);
		}
		else{
			console.error("No element with id “"+parentId+"”");
		}
		return res;
	}

	nomEq(){


	}

	nbMembres(){


	}

	ajoutMembre(nom){
		//ajoute un li à la liste des membres
	}
}