2011-03-10 5 views
1

J'écris la fonction générique pour mon site Web en utilisant jquery qui serait utilisé sur l'ensemble du site pour afficher un message de réussite/erreur. J'ai décidé de faire un plugin.étendre jquery avec une fonction générique

Une forme simple du plug-in est donnée ci-dessous:

; (function ($) { 
     jQuery.FlashMessage=function(msg){ 
      alert(msg); 
     } 

})(jQuery); 

Je voulais savoir si elle est une bonne pratique de définir des plugins dans l'espace de noms jquery ou doit-il défini en $ .fn.XXXX .. ou est-ce que je réfléchis et ça n'a pas d'importance du tout.

+3

Cependant vous le faites, le point de 'function ($)' est que '$' est une référence de portée interne au paramètre 'jQuery' transmis à la fermeture anonyme en bas. Par conséquent, vous devriez utiliser '$' dans la fermeture et non 'jQuery'. – Alnitak

+0

Il semble que vous ne compreniez pas la différence entre '$ .foo' et' $ .fn.foo'. –

+0

@Sime oui, ce qui est exactement pourquoi il a demandé ici! – Alnitak

Répondre

4

Vous ajoutez ces fonctions à jQuery.fn qui devrait être exécuté sur certains éléments, par exemple $('div').yourFunction().

Si vous voulez une fonction "générique", comme $.ajax(), vous devez l'ajouter à l'objet jQuery, comme vous le faites déjà. Mais j'utiliser $ dans la fonction:

(function ($) { 
     $.FlashMessage=function(msg){ 
      alert(msg); 
     } 

})(jQuery); 

Il dépend de quel type de fonctionnalités que vous voulez.

+1

Mais ce modèle n'utilise-t-il pas simplement l'objet jQuery en tant qu'espace de noms? Dans ce cas, je préférerais définir mon propre objet d'espace de noms pour éviter les collisions avec les fonctions intégrées de jQuery. –

2

jQuery.fn est équivalent à jQuery.prototype

avec jQuery.fn.FlashMessage vous pouvez faire

jQuery.fn.FlashMessage=function(){ 
    return this.each(function(){ 
     //do some thing 
    }); 
    }); 


//use like this, your chaining is secured  
jQuery('#someElement').FlashMessage().DoSomeThingElse().SomethingMore(); 

si vous êtes concerné modifie un seul élément que pourquoi utiliser jQuery.FlashMessage, faire comme myNameSpace.FlashMessage

+0

Non, 'jQuery.fn' n'est pas équivalent à' jQuery.prototype'. Mais 'jQuery.fn' est le prototype de l'objet renvoyé par' jQuery (selector) '. – gilly3

+0

http://stackoverflow.com/questions/1755080/why-jquery-do-this-jquery-fn-init-prototype-jquery-fn –

+2

@gilly Oui, c'est vrai. Essayez 'jQuery.fn === jQuery.prototype'. Il évalue à vrai. 'fn' est utilisé comme nom raccourci pour' prototype'. –

0

plugins En général sur le namspace fn, renvoyez un objet jQuery pour maintenir la capacité de chaîne. Ils sont également appliqués à jQuery.prototype afin que tous les objets jQuery puissent l'appeler.

Consultez cette page pour une très bonne vue d'ensemble sur un plugin de création: http://docs.jquery.com/Plugins/Authoring

Questions connexes