Какой лучший способ разделить мой Javascript или Coffeescript в приложении Rails? - PullRequest
1 голос
/ 01 марта 2012

Допустим, у меня есть приложение rails с ресурсом - User.У меня есть JavaScript, который должен быть доступен для любой страницы, которая обслуживается.У меня есть javascript, который должен быть доступен для любой страницы, которая обслуживается пользователем.И у меня есть JavaScript, который должен быть доступен для каждого конкретного действия в разделе пользователя.В Rails 3.1 и выше, есть ли простой способ убедиться, что мой Javascript доступен только для страниц, которые требуют этого?Что насчет coffeescript?

1 Ответ

0 голосов
/ 14 марта 2012

Я думаю, что связанный элемент от Боба уместен (есть комментарий, касающийся компромисса между производительностью и количеством загруженных файлов), но я видел в этом вопрос больше о интервале имен, области и структуре.1002 * Чтобы конкретно ответить на вопрос (и при условии, что вы используете jQuery), рассмотрите следующий CoffeeScript:

$ ->
  doSomething()
  doSomethingElse("#some-element")

doSomething = ->
  alert("I'm doing something")

doSomethingElse  = (selector) ->
  alert("I'm hiding something")
  $(selector).hide()

Компилятор CoffeeScript обернет все это в анонимную функцию и, таким образом, будет доступен тольков контексте, из которого загружена страница (тег сценария, или файл, относящийся к контроллеру, или application.js для глобальной видимости).

Есть несколько моделей для рассмотрения.Простым является следование шаблону наличия «вещей», специфичных для модели, и тех, которые обычно полезны (глобальные).Поэтому, если мне нужна функция javascript, специфичная для пользователя, она входит в app/assets/javascripts/users.js.coffee, в противном случае она должна быть глобальной (в application.js.coffee).

Гораздо более полное и сложное решение предлагаетсяrails-backbone gem, в котором есть генераторы, которые создают модели, представления, шаблоны и маршрутизаторы CoffeeScript, которые заменяют многое из того, что мы получаем с помощью обычного rails generate scaffold foo - те же самые операции CRUD выполняются совершенно другим способом, ишаблоны (в частности, встроенный JavaScript) очень похожи на шаблоны ERB.Для меня это скорее прыжок в веру.

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

Не уверен, что ответ на этот вопрос у вас был, но я думаю, что важно различать поставка активов, что делает Asset Pipeline, и выполнение javascript, что является предметом обзора, что CoffeeScript делает очень хорошо, и что backbone.js идет еще дальше.

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