jQuery в CodeIgniter, внутри представления или во внешнем js-файле?

Я разрабатываю веб-приложение с помощью CodeIgniter. Все это время я помещал пользовательский код js в причудливые вещи внутри файла вида. Делая это, я могу использовать функции site_url() и base_url() предоставляемые CodeIgniter.

Сегодня я хочу отделить все пользовательские js-коды от файла вида во внешний файл js. Затем он ударил меня, я не могу использовать site_url() и base_url() во внешнем js-файле. Итак, мне пришлось переместить код js обратно в файл просмотра.

Я хочу спросить мнение, пример и передовую практику для подобных проблем. Вы помещаете пользовательский код js внутри представления или во внешний файл js? Если вы поместите его во внешний файл, как вы site_url() потребности в site_url() и base_url() (помимо, конечно, base_url() абсолютный URL-адрес, который я хочу избежать).

Обычно я держу мой во внешнем файле, но размещаю одну строку внутри своего шаблона (view), который объявляет переменную javascript под названием «baseurl», которая позже может использоваться моим внешним javascript.

 <script type="text/javascript"> var baseurl = "<?php print base_url(); ?>"; </script> <script type="text/javascript" src="/js/scripts.js"></script> 

Теперь мой файл base_url() имеет доступ к base_url() через собственную переменную baseurl .

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

Вот мой рецепт для Javscript (и CSS) доброты с CI:

  1. Возьмите копию Minify – если вы этого еще не знаете, ваша жизнь будет лучше. Не в « Любви с первого взгляда / я только что обнаружил jQuery / xkcd / unit testing », но, по крайней мере, в « Dude, подготовленные заявления уничтожают SQL-инъекцию ».

  2. Во-вторых, создайте контроллер CI, который инкапсулирует Minify (не должен быть слишком сложным, просто не забудьте установить правильный HTTP-заголовок и передать параметры)

  3. Опционально активируйте кеширование, чтобы все работало невероятно быстро (у Minify есть встроенное кэширование, но если вы уже кэшируете свой контент CI, вы также можете использовать тот же метод здесь.

  4. Необязательно определите некоторые группы для Minify, чтобы сделать загрузку скрипта еще приятнее

  5. Необязательно добавьте переменные baseurl и siteurl (и любые другие значения, которые могут вам понадобиться) к выходу javascript

  6. И presto, теперь вы сможете загружать свои скрипты, вызывая Minify-wrapper:

    <script type="text/javascript" src="/min/g=js"></script>

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


О, и если вы хотите быть очень приятным для своих читателей с исходным кодом, вы можете автоматически добавить что-то вроде этого к выходу:

 // Javascript compressed using Minify by Ryan Grove and Steve Clay // (http://code.google.com/p/minify/) // Human-readable source files: // http://www.yourdomain.com/js/core_functions.js // http://www.yourdomain.com/js/interface.js // http://www.yourdomain.com/js/newsticker.js // http://www.yourdomain.com/js/more_magic.js (...) 

По крайней мере, это то, что я делаю.

Донни, если вы начнете проходить через каждый URL отдельно, вы просто будете болеть за мяч. Почему бы просто не пройти через base_url () и contcat контроллера / метода в конце?

Вы теряете возможность обмениваться параметрами index_page и url_suffix, но в любом случае они не должны изменять все это часто.