Как сохранить глобальное значение (не обязательно глобальную переменную) в jQuery?


В настоящее время я работаю на устаревшей веб-странице, которая использует тонну JavaScript, jQuery, Microsoft client JavaScript и другие библиотеки. Суть-я не могу переписать всю страницу с нуля, так как бизнес не может ее оправдать. Так... это то, что есть. В любом случае, мне нужно загрязнить (я действительно старался не слишком) глобальное пространство имен с переменной. Есть три варианта, о которых я думал -

  1. просто сохранить / получить его с помощью обычного JavaScript декларация -var x = 0;

  2. используйте jQuery для хранения / извлечения значения в теге DOM -$("body").data("x", 0);

  3. используйте скрытое поле формы и установите / извлеките значение с помощью jQuery -$("whatever").data("x", 0);

есть ли лучший способ? Я посмотрел на существующую кучу кода, и я не верю, что переменная может быть ограничена в функции.

6 80

6 ответов:

Вы можете создать пространство имен внутри объекта jQuery, вот так:

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

или:

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

имейте в виду, что любой метод плагина с именем "mynamespace" будет перезаписан, поэтому обязательно используйте разумное имя.

для меня лучший способ справиться с этой ситуацией-определить объект в окне object:

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

это будет держать ваш объем аккуратным и чистым. И всякий раз, когда вы получите доступ к глобальному использованию window.my_config любой, кто смотрит на код, будет знать, что глобальный доступ осуществляется.

вы можете создать хэш в глобальной области и использовать его в качестве пространства имен:

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

просто делясь своей практикой с вами, я бы сделал глобальный объект / var в требуемом файле JavaScript с разумным префиксом, как если бы я работал на странице, где этот объект будет текстовым полем, тогда я бы назвал его:

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

Если у вас есть несколько глобальных переменных, вы также можете иметь пространство имен, например:

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

эти переменные будут доступны вам на всем веб-сайте после их инициализации.

Я надеюсь, что это помогает.

просто короткое уведомление: Является ли fancybox AJAX (что означает, что он загружается в iFrame, вы должны добавить "parent" в метод close, например: js parent.$.fancybox.close();

использовать подчеркивания isEmpty().

_.isEmpty('') вернутся true.