Как связать файл CoffeeScript с представлением?
Просто установленные рельсы 3.1 rc1 и пытаюсь найти лучший способ управления javascript с помощью нового конвейера
По умолчанию все coffeescript скомпилированы в один файл application.js, это хорошо.
Каждый отдельный файл кофе script добавляется в файл js и заверяется в анонимную функцию, которая выполняется с помощью метода вызова
Обычным сценарием будет использование некоторого jquery для превращения различных форм в формы ajax, обновление пользовательского интерфейса и т.д.
Многие из этих скриптов будут специфичны для контроллера или действия, я пытаюсь понять "обычный" способ справиться с этим,
поскольку все обернуто анонимной функцией, как я могу выполнить только
код для конкретного контроллера/действия, по умолчанию все анонимные функции выполняются
Я играл с некоторыми хаками, где я загружал контроллер и имя действия в переменные js, а затем в
coffeescript проверить те, чтобы условно запустить код, мне это не очень нравится
Моя первоначальная мысль заключалась в том, что каждый файл кофе будет содержать js namespace/object, и я бы назвал конкретные из представления,
собирается шипнуть это, используя конфигурацию default_bare = true
см. Как использовать параметр "- bare" в Rails 3.1 для CoffeeScript?
ИЗМЕНИТЬ
Оглядываясь еще на несколько: похоже, это может быть правильный подход - "Невозможно найти переменную" ошибка с Rails 3.1 и Coffeescript
Ответы
Ответ 1
Существует два общих подхода:
-
Сделать поведение условным на наличие определенного элемента. Например, код для запуска регистрационного листа должен быть предваряем что-то вроде
if $('#signup').length > 0
-
Сделать поведение условным для класса в элементе body
. Вы можете установить класс тела с помощью ERB. Это часто желательно для таблиц стилей. Код будет что-то вроде
if $('body').hasClass 'user'
Ответ 2
gistyle - это простой камень, который помогает вам запускать javascript-коды конкретных действий.
Следуя его настройке, вы устанавливаете некоторые атрибуты данных в своем элементе body, представляя текущий контроллер и имена действий. Затем он будет вызывать это действие только при загрузке соответствующего представления.