2012-01-02 2 views
1

На данный момент у меня есть целая группа html + php-файлов с функцией $ (document) .ready в каждой.Jamescript и jquery Пространства имен

Я считаю, что путь к тому, чтобы собрать как можно больше моего 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 получает кеширование, поэтому я должен очищать кеш браузера каждый раз, когда я вношу в него какие-либо изменения. Есть ли какие-то быстрые пути?

+1

Я не знаю недостатки (если таковые имеются), но вы могли бы: 1) передать функцию непосредственно в '.ready' и 2) для вашей проблемы кеширования, просто добавьте, например, '? v2' в URL-адрес файла JavaScript, чтобы обмануть браузер для его повторной установки. – pimvdb

ответ

1

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

$(document).ready(productActions.documentReady) 

там много различных способов обработки кэширования. Например, вы можете поместить отметку времени в файл, когда она была сохранена (мы делаем это автоматически в сценарии сборки), а затем применим far-futures expires headers, поэтому он загружается только один раз.

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

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

И тогда мы можем сделать некоторую крутость и в РНР сделать что-то вроде этого, которая полностью пригодны для повторного использования во всех ваших страницах:

var pageName = "<?= $pageName ?>"; 
if (ITV.pages[pageName]) $(document).ready(ITV.pages[pageName].init); 
0

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

<script type="" src="some.js?var=somerandvars" /> 
Смежные вопросы