Проблемы с областью всегда сложны. Я не претендую на звание эксперта, но мне кажется, что этот способ работает довольно последовательно:
- Создать новый объект в глобальной области видимости.
- Все другие функции и переменные, специфичные для моего приложения, находятся в этом объекте. Техника - это просто пространство имен через объект
- Обеспечить правильное упорядочение сценариев: сначала jQuery, затем любые другие сторонние плагины, затем сценарии приложений; вызывать функцию готовности документа (если она используется) только в конце всего этого.
Пример создания пространства имен с объектом:
var myApp = myApp || {}; // create it if the variable isn't already being used
myApp.oTable = $('#admin_users').dataTable({ parameters });
myApp.someUtilityFunction = function(foo) { alert(foo) };
Кроме того, вы можете видеть, что я использую идентификатор для моей таблицы данных в приведенном выше примере. Селектор - это селектор, так что ваш будет работать, но в любом случае он всегда будет уникальной таблицей, поэтому селектор идентификаторов немного эффективнее. Я также не уверен на 100%, работает ли dataTable () только на первом узле, возвращенном селектором, или нет (я надеюсь!), Что является потенциальной проблемой.
Имея это, вы можете без страха связать свой щелчок в документе:
$(function() {
$('#click_me').click( function () {
myApp.oTable.fnReloadAjax(); // if script is available
});
});
Кроме того, если #click_me когда-либо рискует быть уничтоженным (например, если вы находитесь внутри перерисовываемой таблицы!), Лучше использовать .delegate () (jQuery 1.6.x) или .on () (1,7 и выше)