【问题标题】:Where did link_to_function disappear to in Rails 3?Rails 3 中的 link_to_function 消失在哪里?
【发布时间】:2010-02-12 07:28:51
【问题描述】:

我只是在玩 Rails 3 测试版,发现 link_to_function 现在不见了。我认为有一种替代方法可以实现相同的结果(onclick 事件?),但我想知道是否有更多 Rails-3'y 方法来做到这一点。 TIA。

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

Rails 3 似乎已经取消了 Prototype Helper,转而采用一种不那么突兀的/JS 库无关方法。目标是消除 Rails 生成的所有内联 JavaScript。 Prototype Helper 生成了几乎所有的 javascript。

现在,只要提供 :remote => true 选项,任何非远程助手变体都将在您选择的 JS 库中为远程调用生成正确的 javascript。

不幸的是,这不适用于 x to function 方法。目前,prototype legacy helpers 不再是 Rails 的核心部分。

您还可以使用 ActionView::Helpers::PrototypeHelper::JavascriptGenerator::GeneratorMethods 中定义的调用来为 :onclick 提供 javascript 代码,作为 link_to 的 html_option,但这并不完全正确。

例子:

Rails < 3                      | Rails 3
link_to_remote "target", url   | link_to "target", url, :remote => true
form_remote_for @post          | form_for @post, :remote => true

等等……

或者类似的东西。我很难找到官方文件来支持我的主张。所以release notes 现在必须这样做。

在使用它之前,您需要包含正确的 js 源文件。确保您正在加载prototype.js 和rails.js,或选择的JS 框架的库和驱动程序。

请记住,Rails 3 现在处于测试阶段。但这并不意味着它已经完成。老实说,我不知道如何替换 link_to_function。它违背了不显眼的 javascript 的理想。

【讨论】:

  • 问题是关于 link_to_function (即直接调用 javascript 而没有 UJS 的东西)。无论如何感谢您的信息。
  • 我写的时候错过了“功能”。我更新了解决方案,为特定问题提供了更好的答案。
【解决方案2】:

要回答我自己的问题,这似乎可行并且足以满足我的需要:

link_to "name", nil, :onlick => "alert('Hello, world!')"

【讨论】:

  • 该解决方案的问题在于它是完全突兀的。我建议你玩 jquery 或原型 + 低专业。
  • 我不认为这是“完全”突兀的,只要你只是从 onclick="" 调用一个处理程序而不是在那里实现它。整个 UJS 的东西还不成熟,甚至它的创建者也不同意推荐的内容(参见 weblog.jamisbuck.org/2010/3/2/unobtrusive-yet-explicit 包括 cmets)。
【解决方案3】:

link_to_remote 可以这样完成

link_to "target",:remote => true

并做一个 ajax 发布/让你拥有

link_to "目标", {:controller => 控制器, :action => 方法, }, :remote => true

在 Rails 2 中是这样的

link_to_remote "目标", :url => {:controller => 控制器,:action => 方法,},:远程 => 是的

【讨论】:

    猜你喜欢
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多