Come memorizzare un valore globale (non necessariamente una variabile globale) in jQuery?

Attualmente sto lavorando su una pagina Web legacy che utilizza una tonnellata di JavaScript, jQuery, JavaScript client Microsoft e altre librerie. La linea di fondo – Non riesco a riscrivere l’intera pagina da zero in quanto l’azienda non può giustificarlo. Quindi … è quello che è. Ad ogni modo, ho bisogno di inquinare (ho davvero provato non troppo) lo spazio dei nomi globale con una variabile. Ci sono le tre opzioni a cui stavo pensando –

  1. Basta archiviarlo / recuperarlo usando una normale dichiarazione JavaScript – var x = 0;

  2. Usa jQuery per memorizzare / recuperare il valore in un tag DOM – $("body").data("x", 0);

  3. Usa un campo modulo nascosto e imposta / recupera il valore con jQuery – $("whatever").data("x", 0);

C’è un modo migliore? Ho esaminato la pila di codice esistente e non credo che la variabile possa essere esaminata in una funzione.

Puoi creare uno spazio dei nomi all’interno dell’object jQuery, in questo modo:

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

o:

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

Tieni presente che qualsiasi metodo di plugin denominato “mynamespace” verrà sovrascritto, quindi assicurati di utilizzare un nome ragionevole.

Per me il modo migliore per gestire questa situazione è definire un object nell’object della finestra:

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

Ciò manterrebbe il tuo objective pulito e pulito. E ogni volta che si accederà al globale usando window.my_config chiunque guardi il codice saprebbe che si sta accedendo a un globale.

È ansible creare un hash nell’ambito globale e utilizzarlo come spazio dei nomi:

 MyNamepace={} MyNamespace.newvar = 'value' // MyNamespace.newvar => 'value' 

Semplicemente condividendo la mia pratica con te, vorrei creare un object / var globale nel file JavaScript richiesto con un prefisso ragionevole, come se stessi lavorando su una pagina in cui questo object fosse una casella di testo, quindi lo chiamerei:

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

Se hai più di una variabile globale, puoi anche avere uno spazio dei nomi come:

 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'; 

Queste variabili saranno disponibili in tutto il sito Web, dopo che sono state inizializzate.

Spero che aiuti.

Solo un breve preavviso: la fancybox è AJAX (il che significa che carica all’interno di un iFrame, dovresti aggiungere “genitore” al metodo close, come questo: js parent.$.fancybox.close();

Usa il carattere di sottolineatura isEmpty() .

_.isEmpty('') restituirà true .