Liens contextuels :
| Auteur | |
|---|---|
| matmat | # 18 Apr 2008 - 19:06:11 |
| 699 Posts |
Bonjour, J'essaye de comprendre le modèle d'évènements DOM 2, et j'ai plusieurs question sur ce sujet. Les seules fois ou j'ai créé des scripts qui utilisent ce modèle je l'ai fait à l'aide de librairies adaptée. Sans l'aide de ces framworks j'ai systématiquement été confronté a des problèmes, donc je voudrais savoir si vous utilisez régulièrement cette fonction a la place du modèle DOM 1. Le premier problème de taille que l'on rencontre c'est la perte du "this" sur la fonction callBack para internet explorer, cela peut être résolu par la fonction de John Resig http://ejohn.org/projects/flexible-javascript-events/. Soit... L'autre problème c'est le passage d'un argument dans la fonction callback comme le this de la méthode en cours par exemple, comme résolu par Yahoo! UI Library http://developer.yahoo.com/yui/event/. Ok mais il faut utiliser Yahoo! UI Library donc pour un petit projet ça fait beaucoup pour un addEvent! J'ai donc essayer de coder une fonction qui fasse la même chose et j'aimerais votre avis : function addEvent(obj, type, fn, objParent){La différence avec la fonction de yahoo! c'est que dans la this de la fonction callback on n' a pas accés aux propriétés de l'objet parent dans yahoo on peut faire : addListener(elementId,'click',function(event,par){avec le code plus haut on fait : addListener(elementId,'click',function(event,par){J'ai essayer de le faire en ajoutant a la fonction : if(obj.addEventListener){Cela ne marche pas avec ie, mais tout bien réfléchi ce n'est pas un problème au contraire cela évitera la confusion entre les this des différentes fonctions et les éventuels paramètre identiques. Le principal est de pouvoir faire passer l'argument. Modifié par matmat (18 Apr 2008 - 19:07) |
| Changaco | # 18 Apr 2008 - 19:11:19 |
ex-CNeo 632 Posts |
Bonjour. Il me semble qu'il y a ce qu'il te faut dans ce fil : Fonctions, méthodes classes et scripts utiles. Édit : et plus précisément ce message. Modifié par Changaco (18 Apr 2008 - 19:13) Firefox peut intégrer un correcteur d'orthographe française. |
| koala64 | # 18 Apr 2008 - 19:59:59 |
| Modérateur 3841 Posts |
Re, Bon, je viens de passer rapidement sur ton message mais personnellement, je ne me sers (toujours) pas du this car j'initialise mes fonctions : function addEvent() {Au parsing du code, j'éxécute la fonction monAlerte en intégrant la référence sur mon lien au sein de la fonction anonyme qui, elle, n'est retournée qu'au moment du clic. Modifié par koala64 (18 Apr 2008 - 20:01) |
| matmat | # 18 Apr 2008 - 22:00:30 |
| 699 Posts |
Changaco a écrit : C'est exactement la même chose que la fonction de John Resig... sauf qu'elle n'a pas de paramètre optionnel. koala64 a écrit : Imaginons un cas un peu plus compliqué ou tu as besoin d'exécuter une autre fonction dépendante d'une autre. function constructSomething{Tu copie dans ce cas le this dans une variable? est ce que ça ne dédouble pas l'objet inutilement? |
| koala64 | # 19 Apr 2008 - 13:17:32 |
| Modérateur 3841 Posts |
Hello, Ben je m'y serais pris comme suit : addEvent(window, 'load', function() {Je n'ai pas à copier l'objet ici et l'avantage, c'est que l'évaluation de sMsg s'est passée au chargement du script et non au moment du clic... ce qui donne un peu plus de répondant. |
| matmat | # 21 Apr 2008 - 00:54:53 |
| 699 Posts |
Salut! vraiment super, c'est un manière vraiment simple est pratique de construire une classe. Imaginons maintenant que notre classe est paramétrable avec plein d'options, il est un peu lourd, il me semble, d'initialiser la classe comme ça:
C'est un peu plus lisible et léger comme ça :
Dans ce cas notre fonction serait :
ou la fonction setOptions() permet d'assigner les nouvelles options, si elle sont envoyées bien sur pour pouvoir aussi garder celle par défault Une autre solution serait:
qui s'écrirais comme ça :
ou la la classe Class est :
C'est librement inspiré de la fonction Class de Mootools qui permet d'initialiser des classes de cette manière, elle est bien faite sauf que l'on est obligé de travailler avec les this, ce qui ne résout pas le problème initial. Le probléme du this est gérer dans Mootools avec la fonction bind() mais le reproduire compliquerais tellement la chose qu'il vaut mieux dans ce cas utiliser le framework. Que penses tu des deux proposition si dessus pour pouvoir écrire des classes propres avec un système d'options, qu'elle méthode des deux (ou aucune) préfères tu? Modifié par matmat (21 Apr 2008 - 00:57) |
| matmat | # 25 Apr 2008 - 21:51:19 |
| 699 Posts |
Salut! Finalement je revient à ma solution initiale, en effet j'ai des problèmes d'écrasements avec les solutions sans this. Si je rappelle une deuxième fois ma classe, les options de ma première classe sont écrasées. La solution proposé au début est la seule qui me permet de faire :
Et ce à chaque fois que je rappelle ma classe avec de nouvelles options. A noter que l'on peut aussi utliser le prototype bind :
Comme ça :
C'est très pratique si on n'a pas besoin du this sur l'élément. C'est aussi très pratique sur la fonction forEach par exemple. |
Les références web : openweb.eu.org - opquast.com - webmaster-hub.com - webrankinfo.com - salemioche.net - web-pour-tous.org - webonorme.org
Nos partenaires : Editions Eyrolles - Location vacances France - Location vacances Europe
Nikozen : Hébergement - Réalisation : Alsacreations.fr

= objParent 

