J'aime l'architecture des plugins jQuery, mais je trouve frustrant (probablement en raison d'un manque de compréhension de ma part) de vouloir conserver une référence à l'instance du plugin pour accéder à des propriétés ou à des méthodes plus tard dans mon code.
Edit : Je tiens à préciser que ce que j'essaie vraiment de faire, c'est de conserver une référence aux méthodes et propriétés utilisées dans le plugin, afin de pouvoir les utiliser ultérieurement.
Prenons le cas d'une icône de chargement AJAX. Dans un environnement OOP plus traditionnel, je pourrais le faire :
var myIcon = new AJAXIcon();
myIcon.start();
//some stuff
myIcon.stop();
Les méthodes et les propriétés de mon objet sont stockées dans une variable pour une utilisation ultérieure. Maintenant, si je veux avoir la même fonctionnalité dans un plugin jQuery, je l'appellerais depuis mon code principal un peu comme ceci :
$("#myId").ajaxIcon()
Par convention, mon plugin doit renvoyer l'objet jQuery original qui lui a été transmis pour permettre la chaînabilité, mais si je fais cela, je perds la possibilité d'accéder aux méthodes et aux propriétés de l'instance du plugin.
Maintenant, je sais que vous pouvez déclarer une fonction publique dans mon plugin, un peu comme suit
$.fn.ajaxIcon = function(options) {
return this.each(function () {
//do some stuff
}
}
$.fn.ajaxIcon.stop = function() {
//stop stuff
}
Cependant, sans rompre la convention qui consiste à renvoyer l'objet jQuery d'origine, je ne peux pas conserver une référence à l'instance spécifique du plugin auquel je veux me référer.
J'aimerais pouvoir faire quelque chose comme ça :
var myIcon = $("myId").ajaxIcon(); //myIcon = a reference to the ajaxIcon
myIcon.start();
//some stuff
myIcon.stop();
Des idées ?