JQuery в CodeIgniter, внутри представления или во внешнем файле JS? - PullRequest
9 голосов
/ 25 февраля 2010

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

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

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

Ответы [ 3 ]

38 голосов
/ 25 февраля 2010

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

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

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

3 голосов
/ 08 марта 2010

Я бы сделал это по-другому - очевидно, 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. И, наконец, теперь вы сможете загружать свои скрипты, вызывая Minify-wrapper:

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

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


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

// 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

(...)

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

0 голосов
/ 25 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...