Пространства имен Javascript и JQuery - PullRequest
1 голос
/ 03 января 2012

На данный момент у меня есть целая куча html + php файлов с функцией $ (document) .ready в каждом.

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

Итак, если у меня есть php-файл с именем product_edit, я бы сделал что-то вроде следующего:

<script type="text/javascript"> 
    $(document).ready(function(){
        productActions.documentReady(); 
    });
</script>

И затем в моем единственном файле site_scripts я мог бы сделать что-то вроде этого:

var productActions = {
    documentReady: function() {
        $('#date').change(function() {
            someGlobalFunction();
            productActions.getTerms();
        });

        $('#product_id').change(function() {
            productActions.getTerms();
        }); 
    },

    getTerms: function() {
        //do something here
    }
};

Во-первых: я поступаю правильно? Это общая методология на правильном пути ... или это чепуха?

Во-вторых: кажется, что мой файл site_scripts кэшируется, поэтому мне приходится очищать кеш браузера каждый раз, когда я в него вносю какие-либо изменения. Есть ли какие-нибудь быстрые способы обойти это?

Ответы [ 3 ]

1 голос
/ 03 января 2012

Нет необходимости заключать его в дополнительную функцию (как сказали комментаторы)

$(document).ready(productActions.documentReady)

Существует множество различных способов обработки кэширования.Например, вы можете захотеть поставить временную метку в файл, когда он был сохранен (мы делаем это автоматически в скрипте сборки), а затем применить заголовки с истекшим сроком действия , чтобы он только загружалсяодин раз.

Кроме того, для вашего пространства имен довольно распространенной практикой является использование глобального пространства имен во всех заглавных буквах.Я работаю в i.TV, и мы делаем что-то вроде этого:

window.ITV = {pages:{}}
ITV.pages.tvListings = {
   init: function() { } // basic init for page
   prop1: "bla bla bla"
} 

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

var pageName = "<?= $pageName ?>";
if (ITV.pages[pageName]) $(document).ready(ITV.pages[pageName].init);
0 голосов
/ 03 января 2012

Для вас вторая панель инструментов веб-разработчика для пользователей и отключение кэша во время разработки.Если вы хотите обновлять файл javascript каждый раз, когда клиент открывает страницу, просто сделайте что-то подобное при добавлении файла js в html:

<script type="" src="some.js?var=somerandvars" />
0 голосов
/ 03 января 2012

1 - Вы идете в правильном направлении ...

2 - Ctrl + F5 выполняет «жесткое обновление», снова загружая все ресурсы ...

Какие запросы генерируют обновления браузеров "F5" и "Ctrl + F5"?

...