【问题标题】:How to replace link_to_function for rails 4.1如何替换rails 4.1的link_to_function
【发布时间】:2014-11-16 22:01:20
【问题描述】:

我正在创建我的第一个真正的 Rails 应用程序,并且我在旅途中学习。我有一种情况,我需要在一个表单上创建嵌套属性,因此一直在查看与该表单相关的 railscast 剧集(196 和 197)。在第二集中,他使用了 link_to_function 方法,这在 rails 4.1 中显然不再可用。

我想知道如何替换它。我一直在尝试链接到,并为其他发布类似问题的人尝试了许多建议的解决方案,但无济于事。

这是我目前部分视图的样子(不过,我已经尝试了很多东西......)

<p class="offset1 fields">
   <%= f.hidden_field :_destroy %>
   <%= link_to "remove", '#', onclick: 'remove_fields("this")' %>
</p>

这是我的 .js.coffee 文件,其中包含 remove_fields() 函数:

remove_fields = (link) -> 
    $(link).previous("input[type=hidden]").value = 1
    $(link).up(".fields").hide

这个函数应该从表单中删除一个字段,但只是在不调用函数的情况下将“#”附加到 url。

从视图链接到资产中的 javascript (coffeescript) 函数的最佳方式是什么?

【问题讨论】:

标签: javascript ruby-on-rails assets link-to-function


【解决方案1】:

解决这个问题的一个好方法是:

a) 将您的 href 属性设置为“javascript:void(0);” b) 为您的链接设置 DOM id 或 CSS 类属性

<%= link_to "remove", "javascript:void(0);", id="remove_link" %>

c) 将 js 点击监听器添加到您的元素(请检查这是否是正确的咖啡脚本语法)

$ ->
  $('#remove_link').click = ()-> 
    $(link).previous("input[type=hidden]").value = 1
    $(link).up(".fields").hide

d) 始终避免在 html 元素上使用 onclick:。

更新:

e) 以下是可能适用于您的代码的替代方法(在您发表评论后):

$ ->
  $('#remove_link').click = ()-> 
    $('.offset1.fields input').attr('value', 1);
    $('.offset1.fields').hide();

【讨论】:

  • 还是不行。我已将咖啡脚本文件更改为简单地执行一个警报语句来测试它,但它永远不会被执行。点击链接什么也不做,除了浏览器的左下角表示它正在执行“javascript:void(0);”
  • 导航到 /assets/application.js 显示该函数已正确编译为 javascript 并包含在内,但无论出于何种原因都没有调用它
  • 您在文档中的新javascript函数准备好了吗?我稍微更新了我的答案以证明它。
  • 好吧,这解决了我原来的问题——它现在正在执行那个javascript——谢谢!不幸的是,它仍然没有删除正确的字段(但我为测试添加的警报消息确实有效 - 尽管仅在第一个链接上)。我可能只需要更熟悉 JQuery...
  • 这让我有所了解,但我现在遇到的真正问题是包含 link_to 的部分渲染了 5 次,有 5 个 text_fields 和 5 个“删除”链接 - 每个字段下都有一个。您的代码有效,但消除了所有 5 个 text_fields,而不仅仅是一个。我试过使用 $('.fields:first').hide(),但是在它隐藏了第一个字段之后,其他链接都无法隐藏,因为它们不是第一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多