У меня есть файл coffescript внутри javascript-папки и находящийся внутри этой папки, рельсы автоматически добавляют его ко всем представлениям, но я хочу, чтобы этот файл использовался только в одном представлении, потому что если он добавленные к другим представлениям, которые вы можете изменить.Добавление coffeescript в заданное представление
ответ
Это относительно распространенная проблема, но есть несколько вещей, которые вы можете сделать, чтобы сделать только этот javascript на определенной странице.
Javascript модуль шаблон
Используя шаблон модуля, вы хотите, чтобы обернуть большую часть JavaScript в анонимных затворов как так (в CoffeeScript):
do ->
# ... all vars and functions are in this scope only
# still maintains access to all globals
return
код внутри затворов, которые вы хотите выполнить может быть обернуты внутри объекта, как это:
(($) ->
myObj = myFunc: (param) ->
# do stuff ...
return
$('selector').click ->
myObj.myFunc()
return
return
) jQuery
Так код, который вы хотите выполнить обернута внутри функции в объекте, а затем может вызвать этот объект при запуске события. Если код, который вы хотите запустить в одном представлении, зависит только от пользовательских взаимодействий, таких как клики, зависания и другие события, вы можете сделать что-то вроде этого.
CSS тела классы
В рельсах, вы можете добавить контроллера и действия классов в теле тега. Делая это, вы можете использовать javascript для таргетинга класса css для тела, а затем либо выполнить некоторый код, либо не на основе класса текущего представления. Это будет выглядеть вроде этого:
В application.html.erb
<body class = "<%= controller_name %> <%= action_name %>"
Давайте предположим, что вы хотите выполнить некоторые CoffeeScript для new
действия Вашего articles
контроллера, то в файле CoffeeScript:
if $('body').hasClass('articles') and $('body').hasClass('new')
# do stuff for the articles#new
else
Paloma камень
Вы можете проверить paloma gem, но я не думаю, что камень является активным Я поддерживал его больше.
Я надеюсь, что это поможет!
Спасибо, но можно было бы сделать что-то вроде отключения require_tree и добавлять теги с помощью «src», которые указывают на адрес кофейных и javascripts, чтобы добавить их вручную в каждый файл, в случае, если есть некоторые, которые должны использоваться во всем проекте. Размещаются в layaout и те, которые не размещены в их соответствующих взглядах. Было бы возможно? – LuisC
Да, это технически возможно, но это сильно зависит от рекомендуемого и предпочтительного пути рельсов. Это также будет большой проблемой производительности, поскольку серверу придется использовать другой актив для потенциально каждого вида. Если вы все еще хотите это сделать, вам придется отказаться от использования конвейера активов и вручную настроить каждое представление для использования конкретного файла JavaScript. Я бы настоятельно рекомендовал вариант 2 выше. – Mark
Возможный дубликат [Rails и Javascript] (http://stackoverflow.com/questions/18724247/rails-and-page-specific-javascript) – Iceman