Присоединение события onClick к функции Rails link_to_function
-
08-07-2019 - |
Вопрос
Как мне прикрепить событие onclick к link_to_function
так, чтобы щелчок по событию обновлял элемент на странице (используя партиалы)?
Когда пользователь нажимает на сгенерированную ссылку, я хочу обновить часть, содержащую код, чтобы обновлять i
. Р>
def add_step_link(form_builder)
logger.info 'ADD_STEP_LINK'
link_to_function 'add a step' do |page|
form_builder.fields_for :steps, Step.new, :child_index => 'NEW_RECORD' do |f|
logger.info 'inserted js'
html = render(:partial => 'step', :locals => { :step_form => f, :i=>@i+=1})
page << "$('steps').insert({ bottom: '#{escape_javascript(html)}'.replace(/NEW_RECORD/g, new Date().getTime()) });"
end
end
end
У меня есть частичное в более крупной форме, которая содержит только:
<%= add_step_link(technique_form) %>
Я пытаюсь отслеживать количество шагов в технике. В форме, которую я создаю, пользователи могут добавлять новые шаги в набор инструкций. Прямо сейчас у меня есть поля по умолчанию для шагов 1-7. Если добавить один шаг, вы получите шаг 8. Проблема заключается в том, что последующие шаги также нумеруются как 8. Р>
Я расширяю " Несколько дочерних моделей в динамической форме " учебник в http://railsforum.com/viewtopic.php?id=28447 для мои собственные цели. Р>
Решение
Хорошо, меня немного смущает то, что вы делаете, но я постараюсь сделать некоторые предложения.
Вместо использования link_to_function используйте link_to_remote . Ссылка на вызовы функций javascript, но на самом деле вы хотите перезвонить контроллеру, который затем запускает некоторые rjs, чтобы либо заменить полный фрагмент, либо, что более вероятно, добавить новый фрагмент (содержащий шаг) в конец текущего шаги. Р>
Это похоже на все те примеры, которые вы видели, когда люди добавляли комментарий к концу комментариев блога (ожидайте использовать link_to_remote, а не remote_form_for), просмотрите 3/4 пути через http://media.rubyonrails.org/video/rails_blog_2.mov
Документы для link_to_remote можно посмотреть здесь: http: // api. rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html р>
Другие советы
Я предлагаю использовать link_to_remote
, как предлагает RichH. Трюк для вас, кажется, отслеживает @i
. Я бы поместил его как параметр URL в link_to_remote
или в объект сеанса. Я бы предложил сессию - это кажется проще.