2011-02-25 3 views
1

dans mon webapp J'ai une variable comme celui-cipassage de données à code javascript encapsulé

var data = { 
    getItem: function(key){ 
     ... 
    } 
} 

Dans tous mes scripts je peux utiliser

data.getItem("Test"); 

Mais comment puis-je l'utiliser dans jquery plugins? Les plugins ont souvent la structure suivante

(function($, window, document) { 
    //....plugin-code 
}); 

Comment appeler ce type de structure? Est-il possible d'utiliser ma variable de données globale dans de tels plugins?

+1

Oui, cela devrait être possible (sauf si l'identificateur 'data' a été éclipsé par une variable/un argument plus local dans le plug-in). –

Répondre

1

Si votre variable de données est globale, alors oui vous pouvez l'utiliser n'importe où, y compris dans les plugins jQuery.

Vous devez vous assurer que les données sont définies avant toute fonction auto-exécutable qui va l'utiliser.

+0

"invoqué immédiatement" au lieu de "auto-exécutable" –

+0

@Sime Point technique intéressant. Merci. Plus d'infos ici, pour ceux qui sont intéressés: http://benalman.com/news/2010/11/immediately-invoked-function-expression/ –

1

En fait, ils ont tendance à avoir une structure

(function($) { 
    // plugin-code 
})(jQuery); 

les points étant que

  1. ils peuvent supposer que $ dans ce champ sera toujours jQuery, indépendamment de toute autre charge qui définit $ par exemple prototype
  2. tout est défini à l'intérieur de cette fermeture et donc seulement ce que vous choisissez d'exposer (par $.fn ou $.extend) est une fuite vers le monde extérieur

Il est évident que si c'est juste votre plugin dans votre environnement où vous pouvez prendre vous utilisez toujours $ = jQuery alors vous n'en avez pas besoin. (Le vôtre a aussi le document et la fenêtre: je n'ai jamais vu ces substitutions et je ne suis pas sûr de ce que vous passeriez ici comme arguments autres que le document et la fenêtre?)

Avez-vous demandé de définir des données dans le plugin ou en tirant de l'extérieur de la portée du plugin? Il n'y a pas de restrictions sur ce que vous pouvez écrire à l'intérieur, donc si vous le définissez et l'utilisez à l'intérieur, votre code fonctionnera exactement comme befoer. Si vous avez besoin d'accéder à des données définies de l'extérieur, vous aurez besoin de les filtrer d'une manière ou d'une autre, par ex. ajouter une méthode d'accès à l'un de $, document ou fenêtre.

Si vous extrayez des données de l'extérieur de la portée du plugin, vous pouvez toujours accéder aux variables globales à l'intérieur de votre clôture, ou vous pouvez les passer en argument supplémentaire - je ne pense pas que cela ferait une différence .