web-dev-qa-db-fra.com

Comment stocker une valeur globale (pas nécessairement une variable globale) dans jQuery?

Je travaille actuellement sur une page Web héritée qui utilise une tonne de JavaScript, jQuery, JavaScript client Microsoft et d'autres bibliothèques. La ligne du bas - je ne peux pas réécrire la page entière à partir de zéro car l'entreprise ne peut pas le justifier. Alors ... c'est ce que c'est. Quoi qu'il en soit, j'ai besoin de polluer (j'ai vraiment essayé pas trop) l'espace de noms global avec une variable. Il y a les trois options auxquelles je pensais -

  1. Il suffit de stocker/récupérer à l'aide d'une déclaration JavaScript normale - var x = 0;

  2. Utilisez jQuery pour stocker/récupérer la valeur dans une balise DOM - $("body").data("x", 0);

  3. Utilisez un champ de formulaire masqué et définissez/récupérez la valeur avec jQuery - $("whatever").data("x", 0);

Y a-t-il un meilleur moyen? J'ai examiné la pile de code existante et je ne crois pas que la variable puisse être définie dans une fonction.

80
Kris Krause

Vous pouvez créer un espace de noms à l'intérieur de l'objet jQuery, comme suit:

$.mynamespace = { 
    myVar : "something", 
    myVar2 : "somethingElse" 
}; 

ou:

$.mynamespace = {};
$.mynamespace.myVar = "something";
$.mynamespace.myVar2 = "somethingElse";

Gardez à l'esprit que toute méthode de plug-in nommée 'mynamespace' sera écrasée. Assurez-vous donc d'utiliser un nom raisonnable.

100
karim79

Pour moi, le meilleur moyen de gérer cette situation est de définir un objet dans l'objet window:

window.my_config =
{
    my_var1 : 1,
    my_var1 : 2,
    my_var1 : 3
};

Cela garderait votre portée nette et nette. Et chaque fois que vous accéderiez au global en utilisant window.my_config tous ceux qui consultent le code sauront qu’un accès global est en cours.

38
ovais.tariq

Vous pouvez créer un hachage dans la portée globale et l'utiliser comme un espace de noms:

MyNamepace={}
MyNamespace.newvar = 'value'
// MyNamespace.newvar => 'value'
6
Pedro Morte Rolo

Tout en partageant ma pratique avec vous, je créerais un objet global/var dans le fichier JavaScript requis avec un préfixe sensible, comme si je travaillais sur une page où cet objet serait une zone de texte, puis je l'appellerais:

g_TxtMyValue = 'value';    // g_ specifies it to be a global variable, it is one
                           // of the many conventions used

Si vous avez plusieurs variables globales, vous pouvez également avoir un espace de noms tel que:

my_txt = {};  // For a real site I would use a prefix relative to the project
              // name instead of "my".

my_txt.testValueOne = 'Value one';
my_txt.testValueOne = 'Value two';

Ces variables seront disponibles sur tout le site, après leur initialisation.

J'espère que ça aide.

2
Umair Jabbar

Utilisez le trait de soulignement isEmpty() .

_.isEmpty('') retournera true.

0
Eldad

Juste un court préavis:

Est-ce que la fancybox fait AJAX (ce qui signifie: si elle est chargée dans un iFrame, vous devriez ajouter "parent" à la méthode close), comme ceci:

parent.$.fancybox.close();
0
Moriz