【问题标题】:Rails 3 - Status of "link_to_function" methodRails 3 - “link_to_function”方法的状态
【发布时间】:2011-07-01 02:22:42
【问题描述】:

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

作为新的 Rails,我担心我可能会使用一些不会长期支持的东西,或者可能成为遗留的 hack。在查看 api.rubyonrails.org 时,我看到 link_to_function 在 ActionView::Helpers::JavaScriptHelper 模块中被明确称为 Ruby on Rails v3.0.4 支持的公共方法。没有关于函数寿命的警告或其他声明。

我应该在 Rails 3 中使用其他方法/方法来代替 link_to_function 吗?或者link_to_function可以用吗?

谢谢。

【问题讨论】:

  • 被弃用意味着它仍然包括在内,但在不久的将来会被删除,因此不建议使用它。
  • 感谢您的澄清。我仍然担心官方文档中没有提到弃用。来自 Java 和 PHP 社区的弃用几乎总是在官方 API 文档中明确传达。在 Ruby on Rails 领域中看起来并非如此。我被警告说,RoR 文档传统很薄弱,但测试精神却很特别。到目前为止,我发现这是真的。 :-)
  • 那么完成工作的首选方法是什么?创建一个类,并将 jQuery 函数绑定到它?

标签: javascript ruby-on-rails


【解决方案1】:

[更新]

正如 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。有几个人想知道(大声地,在提交的 cmets 中)为什么该函数被放回,而 Rails 3 中的大推是Unobtrusive JavaScript,所以 DHH 插话:

这是处理非泛型函数 当您在 ERb 中显式触发 不倾向于手动连接它 通过 JS。 UJS 在 Rails 3 正在摆脱大片 样板代码 ala 数据确认 和数据远程。这些泛型是 自动接线,您不必 麻烦了。

但是对于您自己的功能,ala link_to_function "添加日历", “Calendar.add()”,这是一个更 直接,直接的方法。如果你 还是宁愿经历一个 外部 JS 并手动连接 通过 dom:ready,有一个实地考察日。

Rails 3 中不支持 UJS 关于教条主义。就像 不支持 REST。我们会揭露 对每个人的主要价值,然后 允许它制造的网点 自从。在这里,它是有道理的。

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

【讨论】:

  • @TomH:看来,Rails 3 中对无障碍 Javascript 的支持毕竟是教条主义的。
【解决方案2】:

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

【讨论】:

  • 对于在 Rails 4.1+ 中找到此内容的任何人......情况仍然如此——link_to_function 方法已消失!
【解决方案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'

非常简单。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2014-10-28
    • 2014-11-16
    • 1970-01-01
    相关资源
    最近更新 更多