Rails 3 - Состояние метода link_to_function - PullRequest
16 голосов
/ 21 февраля 2011

При поиске решения проблемы 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 хорошо для использования?

Спасибо.

Ответы [ 3 ]

25 голосов
/ 01 июня 2012

Помощник 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
15 голосов
/ 21 февраля 2011

[Обновить]

Как упоминает 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 link_to_function "Add calendar", "Calendar.add ()", это более прямое,немедленный путь.Если вы все же предпочитаете пройти через внешний JS и вручную подключить его через dom: ready, имейте полевой день.

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

Это, кстати, не про прототип или какой-либо другой специфический js framework.

2 голосов
/ 08 октября 2012

Хотя я собираюсь все перевести на ненавязчивый 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'

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...