Javascript 使用Coffeescript将表行生成Rails中的链接

Javascript 使用Coffeescript将表行生成Rails中的链接,javascript,ruby-on-rails,coffeescript,Javascript,Ruby On Rails,Coffeescript,这与下面的问题有关,但为了与Rails4中的默认值具有可比性,我想使用coffeescript而不是javascript 起点是对前面问题的回答中提供的代码: 视图ERB代码包含具有以下代码的表格生成器: <% @songs.each do |song| %> <tr data-link="<%= edit_song_path(song) %>"> <td><%= song.Name %></td> &l

这与下面的问题有关,但为了与Rails4中的默认值具有可比性,我想使用coffeescript而不是javascript

起点是对前面问题的回答中提供的代码:

视图ERB代码包含具有以下代码的表格生成器:

<% @songs.each do |song| %>
  <tr data-link="<%= edit_song_path(song) %>">
    <td><%= song.Name %></td>
    <td><%= song.Group %></td>
  </tr>
<% end %>
这是我对MarkBerry答案中javascript的翻译。我还尝试了其他建议,如
window.location=$(this.data(“link”)

加载页面时,表格行不可单击。如果我将设置
window.location
的操作替换为警报,则在加载页面时,而不是在用户单击表行时,会出现警报对话框

上述coffeescript代码是song.js.coffee文件中唯一的代码。我是否遗漏了需要围绕代码进行包装的内容

部分答案:在第一条注释中建议的原始coffeescript代码之前添加
$->
,确实会使表格行可以选择一次。从其他阅读资料中,我相信美元符号变量已经成为jQuery的别名(关于Coffeescript的小书中的成语一章就是一个例子:)

不幸的是,加载页面后,可以选择一个表行,从而显示编辑页面,但如果用户使用浏览器上的“后退”按钮或返回页面的链接返回页面,则表行将不再可选

新的coffeescript代码是:

$ ->
  $("tr[data-link]").click -> 
    window.location = this.dataset.link
以上代码是从javascript到coffeescript的正确翻译吗。我对这两种脚本语言都是新手

在Rails 4中使用coffeescript制作可点击的表格行有不同的答案吗


谢谢。

是的,您发布的代码翻译正确。“”是一个很好的站点(尽管有一些bug报告),您可以使用它将JavaScript转换为CoffeeScript,反之亦然

我不确定为什么它不起作用,因为您说,由于@muistooshort建议后发布的代码应该起作用,表行变得“不可读取”。我之所以这样说,是因为您没有在这里操作DOM,在文档准备就绪时(这是
$->
),您已经使用
数据链接
属性将click事件附加到表行,这应该可以正常工作,因为后退按钮和完整页面刷新会重新加载DOM

对于动态添加的内容(或者在前面提到的DOM操作的情况下),您需要使用jQuery方法(替换旧方法)通过DOM树中的父元素或元素将事件绑定到“选择器”。请阅读jQuery的“”方法,它不仅对本期文章有用,而且对将来的事件处理也很有用

但是,对于此问题,您可以尝试以下方法:

$ ->
  $(document).on 'click', 'tr[data-link]', (evt) -> 
    window.location = this.dataset.link
希望这有帮助

$ ->
  $(document).on 'click', 'tr[data-link]', (evt) -> 
    window.location = this.dataset.link