2010-06-02 1 views
4

Il y a plusieurs façons d'écrire des plugins, c'est-à-dire here's a nice example et ce que j'ai vu récemment est le code suivant et il est utilisé par Doug Neiner here; Donc, quelqu'un peut-il me dire les avantages d'utiliser le modèle ci-dessus plutôt que celui ci-dessous. Je ne vois pas l'intérêt d'appeler la fonction $ .extend pour chaque élément de la pile jQuery (ci-dessus), où l'exemple ci-dessous ne le fait qu'une fois, puis fonctionne sur la pile. Pour le tester, j'ai créé deux plugins, en utilisant les deux modèles, qui appliquaient des styles à environ 5000 éléments li et le code ci-dessous prenait environ 1 seconde alors que le modèle ci-dessus prenait environ 1,3 secondes.La meilleure façon d'écrire un plugin jQuery - S'il existe un tel moyen?

(function($){ 
    $.fn.formatLink = function(options){ 
     var options = $.extend({}, $.fn.formatLink.defaultOptions, options || {}); 

     return this.each(function(){ 
     //code here 
     }); 
    }); 

$.fn.formatLink.defaultOptions ={} 
})(jQuery); 
+1

Avez-vous regardé Widget Factory de jQuery UI? http://docs.jquery.com/UI_Developer_Guide#The_widget_factory – PetersenDidIt

+0

@Petersen - J'ai jeté un rapide coup d'oeil à ce lien mais je n'ai pas vraiment vu comment c'était par rapport à ce que j'ai demandé? Y a-t-il quelque chose qui me manque? Il parle du développement de widgets. Pourriez-vous s'il vous plaît m'aider un peu en me disant ce que je devrais regarder. – screenm0nkey

+1

Peut-être qu'il se réfère à cette section de la docs: http://docs.jquery.com/UI_Developer_Guide#Internal_functions_.26_scopes_explained – Mottie

Répondre

1

Je sais que Doug utilisé ce format lors de l'écriture Tout ce curseur, je pense qu'il a été fait pour exposer les fonctions internes et le rendre plus facile de les appeler après un addon a été initialisé. Par exemple dans Anything Slider vous pouvez aller à une diapositive particulière de deux façons:

  1. Utilisez $('.anythingSlider').anythingSlider(2); qui est destiné aux liens externes. Mais cette méthode utilise réellement la méthode ci-dessous pour effectuer l'action.
  2. Une deuxième façon, qui montre comment vous pouvez accéder à la fonction de sous à travers les données se fait comme ceci: $('.anythingSlider').data('AnythingSlider').gotoPage(2);

Peut-être qu'il est plus facile/de meilleures façons, mais je pense que l'auteur a le meilleur explaination/raisonnement pour cette méthode. Alors @Doug Neiner (si ça marche), donnez-nous une idée :)

+0

tout à fait raison. J'ai trouvé cet exemple sur son site à propos d'événements personnalisés http://fuelyourcoding.com/jquery-custom-events-they-will-rock-your-world et après avoir lu son code, j'ai vu pourquoi il utilisait le motif qu'il avait fait. Cela a eu un sens complet. Je pense que la réponse à ma question est d'utiliser le modèle de plugin qui est le plus relatif à la tâche que je fais. – screenm0nkey

+0

Également trouvé ce qui est très utile http://fuelyourcoding.com/jquery-plugin-design-patterns-part-i/ – screenm0nkey

Questions connexes