2012-01-27 3 views
0

В моем приложении rails 3.1 у меня есть 3 разных файла javascript для моей таблицы html. Скажем, table1.js.coffee, table2 и table3.CoffeeScript и erb: require variable file

В моем application.js файл, у меня есть:

// = require table 

И в моем table.js.coffee.erb, я хотел бы сделать что-то вроде этого:

// = require <%= 'table2' %> 
// or (more useful) 
// = require <%= Settings.js_table %> 

Подобно этому, Я смогу изменить поведение моей таблицы из внешнего файла конфигурации. На данный момент это не работает. И мне было интересно, возможно ли это?

Спасибо!

+0

Возможный дубликат [Использование переменной erb в конвейере ресурсов rails] (http://stackoverflow.com/questions/8494181/using-erb-variable-in-rails-asset-pipeline) –

ответ

1

Это не сработает.

Файлы в конвейере скомпилированы по первому запросу в зависимости от их содержимого (и любого разрешенного erb) в это время.

Если вы ссылаетесь на что-то внутри файла конвейера, оно не будет обновляться, если оно будет изменено в другом месте.

Редактировать в ответ на комментарий:

К сожалению, я должен был быть более четким. Общий случай этого не будет работать.

В случае использования его с требованием, оператор require является специальной директивой Sprockets. Он обрабатывается Sprockets до того, как обработчик erb получит его.

Директива требует одного аргумента - строки. В этом случае вы передали 3 аргумента директиве require: открывающий тег erb, строку с кавычками и закрывающий тег erb.

Вот почему вы получаете ошибку 3 аргумента 1.

Лучший (и возможно) единственный способ динамического включения файлов во время выполнения из вашего слоя.

+0

Я знаю об этом. Но даже '= require <% = 'table2'%>' не работает. Я уловил эту ошибку: 'ArgumentError: неправильное количество аргументов (3 для 1)' –

+0

Хорошо, теперь это намного яснее! Спасибо! –