2012-06-20 3 views
1

У меня есть эти CoffeeScript в файл для модели entree, что только instanciates класса в другом CoffeeScript файла:Почему ресурсы Rails не изолированы между моделями?

jQuery(document).ready -> 
    ch = new CepageHandling 
    ch.handleKeyPress() 

handlePress функция фиксирует keyup события на элемент управления.

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

Я видел то же поведение с файлами scss, где стиль, определенный для одной модели, применяется к другим, если дескрипторы совпадают. Может ли кто-нибудь объяснить (или указать на какую-либо статью), если это нормальное поведение, что активы не изолированы в рельсах? Мне очень трудно понять, как это работает.

ответ

1

Файлы манифеста по умолчанию (application.js и т. Д.) Do require_tree ., которые будут загружать все файлы на всех страницах, объединять их все вместе в процессе производства и т. Д. Если вы хотите, чтобы все было изолировано, вам нужно пройти тест в своем ready, в некоторых случаях пропустить этот код, или вам понадобится больше манифестов (а не использовать application.js, например), чтобы выгрузить свой код на страницу. Я предлагаю вам внимательно прочитать каждое слово из asset pipeline Rails Guide ... требуемое чтение!

+0

Я прочитал его, но должен признать, что, возможно, пропустил эту часть. спасибо! – Antoine

+0

Обычно для сложного приложения вы найдете больше, чем просто один манифест. Он работает нормально, чтобы просто поставить тест на идентификатор тела или что-то вначале, но по мере того, как вы получаете реальное приложение, вы, вероятно, захотите использовать разные пакеты для разных областей сайта ('billing.js',' billing.css', 'admin.js' и т. д.). – rfunduk

1

Это происходит из-за файла манифеста application.js, а точнее в этой строке кода:

//= require_tree . 

Что это означает, что все .js файлы, содержащиеся внутри /активы/javascripts/ папка будет загружена в ваши представления.
Как ваш entree.js уже загружен и с помощью JQuery документ готов к работе, он ищет правила вашего файла во всех ваших представлениях.
Это означает, что все ваши страницы, содержащие этот элемент ch, получат такое же поведение.

Смежные вопросы