Подтвердить что ты не робот

Как связать файл 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

4b9b3361

Ответ 1

Существует два общих подхода:

  • Сделать поведение условным на наличие определенного элемента. Например, код для запуска регистрационного листа должен быть предваряем что-то вроде

    if $('#signup').length > 0

  • Сделать поведение условным для класса в элементе body. Вы можете установить класс тела с помощью ERB. Это часто желательно для таблиц стилей. Код будет что-то вроде

    if $('body').hasClass 'user'

Ответ 2

gistyle - это простой камень, который помогает вам запускать javascript-коды конкретных действий.

Следуя его настройке, вы устанавливаете некоторые атрибуты данных в своем элементе body, представляя текущий контроллер и имена действий. Затем он будет вызывать это действие только при загрузке соответствующего представления.