Rails 3 – “link_to_function”方法的状态

在搜索javascript问题的解决方案时,我在Rails 3中看到了关于link_to_function被弃用的多条评论。但是,我已经能够使用link_to_function完成基于Rails-3的项目的一部分。 它工作正常。

作为新的Rails,我担心的是我可能会使用一些长期不受支持的东西,或者可能成为传统的黑客。 在查看api.rubyonrails.org时,我看到在ActionView :: Helpers :: JavaScriptHelper模块中明确地调用了link_to_function作为Ruby on Rails v3.0.4支持的公共方法。 没有关于function寿命的警告或其他声明。

我应该使用其他方法/方法而不是Rails 3中的link_to_function吗? 或者link_to_function可以使用吗?

谢谢。

link_to_function助手已在3.2.4中再次弃用 。

当您需要调用特定的javascript函数等时,该方法本身在一些用例中非常简单和好。您可以轻松添加自己的帮助程序以实现相同的function。 以下代码是从Jeremy的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 

[更新]

正如TomH所提到的,它现在在Rails 3.2.4中再次被弃用

[原始答案]

link_to_function 不再被弃用 ,可以安全使用 。 细节:

link_to_function预定在Rails 3中删除(当Rails 3处于测试版时已经有一段时间了),但该function被放回到https://github.com/rails/rails/commit/d69e561 。 有些人想知道(在提交的评论中)为什么函数被放回去,当Rails 3中的大推动是针对Unobtrusive JavaScript ,所以DHH插话:

这是为了在你不打算通过JS手动连接它时在ERb中显式处理非generics函数触发器。 UJS在Rails 3中取得的巨大成功是摆脱了大量的样板代码 – 数据确认和数据远程。 这些generics是自动连线的,您不必费心。

但是对于你自己的函数,ala link_to_function“添加日历”,“Calendar.add()”,这是一个更直接,更直接的方法。 如果您仍然希望通过外部JS并通过dom手动连接它:准备好,请准备一天。

在Rails 3中对UJS的支持并不是教条主义。 就像对REST的支持一样。 我们将向每个人展示主要价值,然后允许自己制作的商店。 在这里,它是有道理的。

这,顺便说一句,不是关于原型或任何其他特定的js框架。

虽然我打算将所有内容转换为不引人注目的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' 

非常简单。 希望这可以帮助。