Jquery - область внутри $(document).ready()?
Итак, чтобы оставаться организованным, у меня есть несколько javascript файлов, хотя все они (в конце) объединены вместе, чтобы сформировать один последний файл javascript.
Каждое содержимое файла заверяется в:
$(document).ready(function(){
//some javascript here
});
Кажется, что если у меня есть вещи в отдельных файлах (между этим кодом), они не имеют доступа друг к другу. Является ли эта проблема проблемой? Что я могу сделать?
Например, в одном файле у меня была куча кода для создания таблиц из данных, полученных через ajax. Тем не менее, половина файла была просто шаблоном для отображения данных в зависимости от типа и т.д. Я хотел бы иметь шаблоны в их собственном файле.
Я понимаю, что это всего лишь проблема "предпочтения" и что я могу просто использовать все это в одном файле.
Но я надеюсь извлечь из этого и, возможно, даже иметь возможность "по-моему".
Ответы
Ответ 1
Javascript использует функциональные области, поэтому локальные переменные внутри функции не видны снаружи. Вот почему ваш код не может получить доступ к коду из других областей.
Идеальное решение для этого - создать пространство имен.
var NS = {};
(function(){
function privateFunction() { ... }
NS.publicFunction = function(){ ... }
})();
$(document).ready(function(){
NS.publicFunction();
});
Это также полезный шаблон, поскольку он позволяет проводить различие между частным и общедоступным элементами.
Ответ 2
Это проблема с областью. Например:
function a() {
var myHiddenStr = 'abc';
}
alert(typeof(myHiddenStr));
Вы не можете получить доступ к myHiddenStr
вне функции a
. Аналогичным образом анонимная функция, которую вы используете для готового документа, скрывает все в ней.
Наличие глобальной области, в которой вы помещаете вещи из разных js файлов, не является хорошей идеей. Вероятно, лучше иметь один обработчик document.ready и вызывать соответствующие функции изнутри. Затем вы можете получить результаты из функций и передать их другим функциям, которые должны использовать их.