我正在创建我的第一个真正的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)函数的最佳方法是什么?
答案 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();