J'ai créé un plugin JQuery qui fonctionne bien, à l'exception de pouvoir appeler le plugin sur différents objets et que chaque objet conserve les options fournies. Le problème est que si j'appelle le plugin sur un objet, dites: Appelez à nouveau le plugin sur un autre objet, dites: p> (function($) {
$.fn.myPlugin = function(options) {
// build main options before element iteration
var opts = $.extend({}, $.fn.myPlugin.defaults, options);
_option1 = opts.option1;
_option2 = opts.option2;
_option3 = opts.option3;
// iterate all matched elements
return this.each(function() {
callPluginFunctions( this, opts );
});
};
....code continued....
3 Réponses :
Vos options sont plugin-large. Déplacez-les à l'intérieur de chaque (). (Pourquoi demandez-vous cette question? Vous épelez-vous à peu près la solution vous-même.) P>
Je demande parce que je ne connais évidemment pas la solution. J'ai déplacé tout ce qui est venu avant le présent.Chaque fonction dans la présente.Chaque (fonction () et obtenez toujours les mêmes résultats. Pourriez-vous s'il vous plaît clarifier ce que vous voulez dire?
Maintenant je suis vraiment perplexe. Ce que je veux dire, c'est que vous voulez que le _Option1, etc. soit séparé pour chaque élément assorti, vous devez donc les copier par ex. comme cornichon fait. Vous n'avez pas montré comment vous accédez aux options plus tard, il y a peut-être un autre problème là-bas.
Oui, c'était tout mon problème ... accéder aux options plus tard. Je n'ayant pas attaché la configuration à l'objet lui-même. J'ai ajouté un $ (ceci) .Data ('opts', opts); dans chaque () boucle, et maintenant tout fonctionne comme un charme. Merci quand même.
J'ai eu le même problème, mais seules les fonctions passées étaient écrasées. Les propriétés droites persistaient.
Quoi qu'il en soit, expliquer davantage ce que ~ REINERIERPOST signifiait, changer votre code à cela devrait fonctionner. Vous devrez passer 'opts' partout, mais je pense qu'il est nécessaire de prendre les options de l'espace de noms plug-in-large. P> edit: voici le code de mon plugin fort> p> donc je n'ai pas de "config" plugin-large - juste à l'intérieur de chaque fonction. p> p>
Hé, j'ai essayé qu'après la poste de Reinierpost, mais j'ai toujours le même problème. Le problème n'est pas que je ne puisse pas appeler des différentes options, mais après avoir «initialisé» le plugin sur un objet, puis initialisé un objet différent avec des options différentes, lorsque je reviens et appelez toutes les fonctions du plugin sur le premier. Article, il utilise les paramètres donnés au deuxième élément et non le premier. J'espère que c'était clair, laissez-moi savoir sinon.
J'ai mis à jour mon entrée initiale pour montrer comment j'ai utilisé cette technique dans mon plugin. Peut-être que vous parlez d'un objet de configuration à large plugin plutôt que celui initialisé dans votre cette.Chase () boucle?
Oui, c'était attaché les options à l'objet que j'avais manqué. Je vois que vous avez utilisé $. Achetached, j'ai fini par utiliser $ .data ($ (ceci) .Data ('opts', opts);). Y a-t-il une vraie différence entre les deux? Merci
$ .atach était une fonction personnalisée que j'ai écrite dans mon plugin - il ne fait pas partie du noyau de jQuery comme $ .data est & n'est pas analogue du tout.
Tout d'abord, vous voudrez généralement gérer la commande dans votre méthode d'extension. Deuxièmement, vous devriez attacher des configurations à chaque élément ... avec l'exemple ci-dessus, vous avez un modèle générique pour une extension de jQuery, il est généralement bon formulaire pour avoir la convention suivante à utiliser .. p> mis à jour pour utiliser .Data off de chaque individu obj. p> p>
Génial merci. Il manquait les "configurations attachantes à chaque objet". J'ai fini par utiliser $ .Data pour joindre la configuration au lieu de votre suggestion. Y a-t-il des avantages / inconvénients à l'une ou l'autre méthode? Je pense qu'ils sont probablement à peu près la même chose. De plus, j'aime beaucoup votre plugin Configuration, très similaire à JQuery UI. J'ai déjà adopté cela aussi =) merci !!
Je n'utiliserais pas .Data pour chaque objet, car le plugin peut utiliser la délégation d'événements..so, si le plugin est appelé sans arguments, quels? Dans votre exemple, rien n'arriverait ..
@VSync C'est principalement une ligne directrice ... pouvait vérifier l'initialisation indéfinie et l'initialisation des objets aux défauts. Je pense également que l'application de données devrait s'appliquer à chaque élément, car chaque élément branché pourrait être ajusté pour avoir des options différentes plus tard. Je sais que ce n'est pas parfait ... J'essaie simplement de souligner la tendance générale qui semble être utilisée dans l'interface utilisateur et d'autres extensions de JQuery.
J'avais pensé à quelque chose aujourd'hui: il serait préférable d'enregistrer une référence à chaque sélecteur et pour ce sélecteur, stockez les options appropriées et non par article lui-même. Dis que j'ai une manipulation de plugin un 1000 champs d'entrée..Ca ne sera pas une gestion de la mémoire sage pour traiter avec chacune d'elles si disons que je veux un événement de mise au point simple pour déclencher quelque chose. Juste une pensée
Les données de chaque nœud ne doivent-elles pas simplement être un pointeur sur le même objet en mémoire?
En réponse à la réponse correcte de votre édition et de Reinerpost, oui, l'objet de données est un bon moyen d'y aller. Cependant, vérifiez à l'aide de l'usine d'interface utilisateur JQuery ( jQueryui.com/docs/developer_guide#the_widget_factory ) . Je l'ai utilisé pour créer le code de diaporama pour 2010.newsweek.com (voir: jquery.slideshow.js)