jquery - область действия внутри $ (document) .ready ()? - PullRequest
14 голосов
/ 06 декабря 2010

Таким образом, чтобы оставаться организованным, у меня есть несколько файлов javascript, хотя они все (в конце) сведены вместе, чтобы сформировать один окончательный файл javascript.

Содержимое каждого файла заключено в:

$(document).ready(function(){
    //some javascript here
});

Кажется, если у меня есть вещи в отдельных файлах (между этими кодами), они не имеют доступа друг к другу. Это проблема сфер? Что я могу сделать?

Например, в одном файле у меня была куча кода для создания таблиц из данных, полученных через ajax. Однако половина файла была просто шаблонами для отображения данных в зависимости от их типов и тому подобного. Я хотел бы иметь шаблоны в своем собственном файле.

Я понимаю, что это просто проблема с настройками, и я мог бы просто хранить все это в одном файле.

Но я надеюсь извлечь уроки из этого и, возможно, даже иметь возможность «по-моему».

Ответы [ 2 ]

28 голосов
/ 06 декабря 2010

Javascript использует функциональные области, поэтому локальные переменные внутри функции не видны снаружи. Вот почему ваш код не может получить доступ к коду из других областей.

Идеальное решение для этого - создать Пространство имен .

var NS = {};

(function(){
  function privateFunction() { ... }
  NS.publicFunction = function(){ ... }
})();

$(document).ready(function(){
  NS.publicFunction();
});

Это также полезный шаблон, поскольку он позволяет различать частные и публичные элементы.

1 голос
/ 06 декабря 2010

Это вопрос объема. Например:

function a() {
   var myHiddenStr = 'abc';
}
alert(typeof(myHiddenStr));

Вы не можете получить доступ к myHiddenStr вне функции a. Аналогичным образом анонимная функция, которую вы используете для подготовки документов, скрывает все в ней.

Иметь глобальную область видимости, куда вы помещаете вещи из разных js-файлов, не очень хорошая идея. Вероятно, лучше иметь один обработчик document.ready и вызывать соответствующие функции из него. Затем вы можете получить результаты из функций и передать их другим функциям, которым необходимо их использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...