在搜索javascript问题的解决方案时,我在Rails 3中看到有关link_to_function
被弃用的多条评论。但是,我已经能够使用{完成基于Rails-3的项目的一部分{1}}。它工作正常。
作为新的Rails,我担心的是我可能会使用长期不支持的东西,或者可能成为传统黑客。在查看api.rubyonrails.org时,我看到link_to_function
在ActionView :: Helpers :: JavaScriptHelper模块中明确地被称为Ruby on Rails v3.0.4支持的公共方法。没有关于功能寿命的警告或其他声明。
我是否应该在Rails 3中使用其他方法/方法而不是link_to_function
?或者link_to_function
可以使用吗?
感谢。
答案 0 :(得分:25)
link_to_function
帮助已经deprecated again in 3.2.4。
当您需要调用特定的javascript函数等时,该方法本身在某些用例中非常简单和好。您可以轻松添加自己的帮助程序以实现相同的功能。以下代码是在https://github.com/rails/rails/pull/5922#issuecomment-5770442
中从Jeremy复制的# /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
答案 1 :(得分:15)
<强> [更新] 强>
正如TomH所提到的,在Rails 3.2.4中它是now deprecated again
[原始答案]
link_to_function
不再弃用且可安全使用。详细说明:
link_to_function
计划在Rails 3中删除(当Rails 3处于测试阶段时已暂停一段时间),但该函数被放回https://github.com/rails/rails/commit/d69e561。有几个人(大声地,在提交的评论中)想知道为什么函数被放回去,当Rails 3中的大推动是Unobtrusive JavaScript时,所以DHH插入:
这是为了处理非泛型函数 当你在ERb中明确触发 不倾向于手动挂钩 通过JS。 UJS的巨大胜利 Rails 3正在摆脱大片 样板代码ala数据确认 和数据远程。这些仿制药是 自动连接,你不必 打扰它。
但是对于你自己的职能,ala link_to_function“添加日历”, “Calendar.add()”,这是一个更多 直接,即时的方式去。如果你 仍然宁愿经历一个 外部JS并手动连接 通过dom:准备好,有一个实地日。
在Rails 3中对UJS的支持不是 关于教条。就像 对REST的支持不是。我们会曝光 每个人的主要价值然后 允许它所在的商店 以来。在这里,它是有道理的。
这,顺便说一句,不是关于原型或 任何其他特定的js框架。
答案 2 :(得分:2)
虽然我打算将所有内容转换为不引人注目的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'
很简单。希望这会有所帮助。