Подтвердить что ты не робот

Rails 3 - статус метода link_to_function

В поисках решения проблемы javascript я видел несколько комментариев о link_to_function, устаревших в Rails 3. Однако мне удалось заполнить раздел моего проекта на основе Rails-3, используя link_to_function, Он работает нормально.

Будучи новым Rails, я беспокоюсь, что я могу использовать то, что не будет поддерживаться в долгосрочной перспективе или может стать устаревшим взломом. При взгляде на api.rubyonrails.org я вижу, что link_to_function явно вызван в модуле ActionView:: Helpers:: JavaScriptHelper в качестве поддерживаемого общедоступного метода для Ruby on Rails v3.0.4. Никаких предупреждений или других утверждений о долговечности функции.

Есть ли другой подход/метод, который я должен использовать вместо link_to_function в Rails 3? Или можно использовать link_to_function?

Спасибо.

4b9b3361

Ответ 1

Помощник link_to_function был снова устарел в 3.2.4.

Сам метод достаточно прост и хорош в некоторых случаях, когда вам нужно вызвать определенную функцию javascript и т.д. Вы можете легко добавить своего помощника для достижения той же функциональности. Следующий код был скопирован из Джереми в https://github.com/rails/rails/pull/5922#issuecomment-5770442

# /app/helpers/link_to_function_helper.rb
module LinkToFunctionHelper
  def link_to_function(name, *args, &block)
     html_options = args.extract_options!.symbolize_keys

     function = block_given? ? update_page(&block) : args[0] || ''
     onclick = "#{"#{html_options[:onclick]}; " if html_options[:onclick]}#{function}; return false;"
     href = html_options[:href] || '#'

     content_tag(:a, name, html_options.merge(:href => href, :onclick => onclick))
  end
end

Ответ 2

[Обновление]

Как упоминает TomH, теперь устарел снова в Rails 3.2.4

[Оригинальный ответ]

link_to_function не устарел и безопасен для использования. Подробности:

link_to_function планировалось удалить в Rails 3 (и некоторое время, когда Rails 3 был в бета-версии), но функция была возвращена в https://github.com/rails/rails/commit/d69e561. Несколько человек задавались вопросом (вслух, в комментариях фиксации), почему функция была возвращена, когда большой толчок в Rails 3 был для ненавязчивый JavaScript, поэтому DHH подключен:

Это для обработки не-общей функции триггеры явно в ERb, когда вы не склонен вручную подключать его через JS. Большой выигрыш для UJS в Rails 3 избавляется от больших рядов кода шаблона ala-подтверждения и дистанционное управление данными. Эти дженерики автоматически подключен, и вам не нужно беспокоиться об этом.

Но для ваших собственных функций ala link_to_function "Добавить календарь", "Calendar.add()", это больше прямой, немедленный путь. если ты по-прежнему внешний JS и подключить его вручную через dom: готов, иметь полевой день.

Поддержка UJS в Rails 3 не является о догматике. Как и поддержка REST - нет. Мы разоблачим главное значение для всех, а затем разрешить выходы, где он поскольку. Здесь это имеет смысл.

Это, кстати, не о прототипе или любая другая конкретная js-инфраструктура.

Ответ 3

Пока я намерен переключить все на ненавязчивый javascript, хорошим промежуточным шагом (для меня) было заменить

link_to_function icon_tag('close.png'), '$(this).parent().hide()', :title => t('actions.close'), :class => 'close'

со следующим:

link_to icon_tag('close.png'), '#', :onclick => '$(this).parent().hide()', :title => t('actions.close'), :class => 'close'

Очень просто. Надеюсь, это поможет.