J'ai codé avec jQuery depuis environ 2 ans mais je ne l'ai jamais fait dans un plugin. J'essaye de changer ça. J'ai trouvé quelques sites qui expliquent comment créer un plugin et je comprends les bases.Création de plugins jQuery: explication de "this" keyword?
La partie que je ne comprends pas est l'utilisation du mot-clé this
. Voici un exemple simple plugin:
(function($){
$.fn.myPlugin = function(options)
{
// Do whatever
return this.each(function(){
element = $(this);
});
}
$.fn.myPlugin.init = function()
{
// Initiate plugin
}
})(jQuery);
Sur la 5ème ligne de mon code, je this.each
. Dans ce cas, le mot clé this
fait référence à tous les éléments du sélecteur. La ligne suivante utilise $(this)
qui est l'élément actuel, de la même manière que si je le fais dans un .click(function(){$(this).hide();})
.
Maintenant, dans la logique OO, nous avons généralement un mot-clé this
pour faire référence aux fonctions ou propriétés internes. Si dans $.fn.myPlugin
je veux appeler $.fn.myPlugin.init()
, je m'attendais à être en mesure de faire quelque chose comme this.init()
mais cela ne semble pas fonctionner.
En outre, je m'attendais à être en mesure de définir les propriétés de classe d'une manière similaire, quelque chose comme this.myVariable = "my value"
.
Donc, si quelqu'un peut expliquer tout ce qui me manque pour comprendre le concept de plugin avec jQuery, ou pointez-moi dans la bonne direction avec un lien pertinent, j'apprécierais l'aide! Si mes explications ne sont pas assez claires, faites le moi savoir et je vais essayer de faire mieux, mais c'est un peu flou dans mon esprit en ce moment.
this.myPlugin.init() et .fn.myPlugin.init() $ à la fois donnez-moi une erreur indéfinie ... – Gabriel
@Gabriel - Cela dépend où et quand vous les appelez. Essayez cet exemple: http://jsfiddle.net/bRfdE/ Vous obtiendrez 3 popups pour les 3 différentes façons dont il est appelé. Donc, les questions seraient quand/où appelez-vous, et que fait-il? Vous devrez apporter une petite modification si vous attendez que 'this' fasse référence à l'élément DOM ou à l'objet jQuery. – user113716
vous avez absolument raison, désolé, mon appel était dans une fonction anonyme dans un bind(). Cela m'apporte un autre problème, mais je vais comprendre quelque chose ... Je pense que toutes les références à mes objets sont perdues quand je suis là ... – Gabriel