Мне очень плохо с Ajax и jquery и javascript вообще и особенно плохо в Rails, так простите тупость этого вопроса.Rails 4 link выполнить простой код jQuery напрямую
У меня есть ссылка в моем приложении Rails 4, что я хочу, чтобы он выполнил простой код hide/show jquery, чтобы скрыть или показать столбец на основе значения cookie.
Я бы хотел сделать это, не называя отдельные сценарии js или кофе, но сразу же при нажатии ссылки без перезагрузки страницы.
У меня есть код Rails, который работает, чтобы записать значение cookie и показать или скрыть столбец, но перезагрузив страницу, так что теперь я пытаюсь сделать немного менее навязчиво с помощью Ajax.
В старые добрые дни, прежде чем Rails Я хотел бы сделать что-то вроде:
onclick='javascript: hideShow(this)'
Или что-то подобное, не можете вспомнить правильный синтаксис.
Как я могу сделать это в мире Rails? Я где-то читал, что вы можете использовать link_to
с блоком, но это вызывает ошибку.
Моя ссылка выглядит следующим образом:
= link_to "<span class='btn btn-sm btn-primary'>#{dogtag_icon}</span>".html_safe, users_flip_show_dogtag_path, title: icon_title, remote: true
Я использую SLIM шаблоны, так что я попытался создать блок, как это:
= link_to "<span class='btn btn-sm btn-primary'>#{dogtag_icon}</span>".html_safe, users_flip_show_dogtag_path, title: icon_title, remote: true do
- dogtag_show_value = cookies[:show_library_dogtags].to_i
javascript:
if (#{dogtag_show_value} == 1) {
$('.dogTag').show();
} else {
$('.dogTag').hide();
}
Rails не понравилось, что один бит.
Я также должен объяснить, что users_flip_show_dogtag_path
важен, потому что это метод контроллера, в котором cookie получает значение 0 или 1, я хотел бы сохранить его, чтобы избежать написания этого кода в шаблоне представления.
Если я ammend ссылки на что-то вроде этого:
= link_to "<span class='btn btn-sm btn-primary'>#{dogtag_icon}</span>".html_safe do
Он даже не появляется в представлении.
Казалось бы, такая простая вещь, но я не могу понять это. Поиски Google не оказались полезными.
Любая помощь будет оценена, спасибо.
Edit:
Извините за двойной редактировать, неправильный вопрос
Я использую ответ mccannf, и это, кажется, работает. Теперь мне просто нужно установить видимость столбца при загрузке на основе значения cookie. Я делаю это в верхней части зрителя, но он не работает:
javascript:
if (#{@dogtag_show_value} == '1') {
$('.dogTag').show();
} else {
$('.dogTag').hide();
}
Еще раз спасибо.
Примечание: Я решил выше, просто поместив код в нижней части страницы после создания элемента DOM. Имея это наверху, он пытался выполнить до того, как существовал элемент DOM.Я знаю, глупая ошибка!
Спасибо, я пытался избежать дополнительного файла show_dogtag.js.erb, но даже попробовал этот метод, я получаю сообщение об ошибке: 'NoMethodError - undefined method' gsub 'для 1: Fixnum: actionpack (4.0.4) lib/action_view /helpers/javascript_helper.rb:27:in 'escape_javascript'' для этой строки:' if ("<% = j @dogtag_show_value%>" == 1) {'. По-видимому, он пытается запустить 'gsub' на значение, и это целое число, но где этот пробег' gsub'? – kakubei
Мне удалось обойти эту ошибку, создав файл cookie как строку вместо целого числа, что я не очень доволен, но по крайней мере это не вызывает ошибки. – kakubei
Ну, файл 'js.erb' - это ненавязчивый путь! Для первой загрузки я бы посмотрел на ответ на этот вопрос: http://stackoverflow.com/questions/3437585/best-way-to-add-page-specific-javascript-in-a-rails-3-app – mccannf