如何替换rails 4.1的link_to_function

时间:2014-09-22 20:19:08

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

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

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

这是我的观点部分目前的样子(尽管如此,我尝试了很多东西......)

<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)函数的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

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

a)将你的href属性设置为&#34; javascript:void(0);&#34; b)将DOM ID或CSS类属性设置为链接

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

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

$ ->
  $('#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();