在 Rails 资产管道的 js.coffee 文件中使用 erb 时出错

2024-04-13

我有以下代码:

/assets/javascripts/home.js.coffee.erb

jQuery ->
  addClickListeners = ->
        $(document).on 'click', '#add-chord-link', addChord
        $(document).on 'click', '#remove-chord-link', removeChord

    addChord = (e) ->
        e.preventDefault()
        console.log("<%= asset_path('rails.png') %>")
        console.log("<%= link_to 'Sign up now!', '#' %>")
        console.log('addChord clicked')
        $('#chord-choices').append('addedChord')

    removeChord = (e) ->
        e.preventDefault()
        $('#chord-choices select').last().remove()
        console.log('removeChord clicked')

    addClickListeners()

控制台输出为console.log("<%= asset_path('rails.png') %>") is /assets/rails.png,这正是我所期望的。然而,每当我包括console.log("<%= link_to 'Sign up now!', '#' %>")加载页面时出现错误,指出:

    undefined method `link_to' for #<#<Class:0x007f9095960938>:0x007f9095b78ab8>

为什么这不起作用?


问题

原因是 Sprockets(Assets pineline 背后的宝石)不依赖于 Rails 来处理 erb。查看可用的本机助手https://github.com/sstephenson/sprockets#invoking-ruby-with-erb https://github.com/sstephenson/sprockets#invoking-ruby-with-erb

Rails 在 ActiveSupport 中为 Assets Pineline 添加了更多帮助程序,您可以使用它们。您可以在这里找到它们:http://api.rubyonrails.org/classes/ActionView/Helpers/AssetUrlHelper.html http://api.rubyonrails.org/classes/ActionView/Helpers/AssetUrlHelper.html

link_to是一个属于ActionView的助手,所以它不包含在Assets Pineline中。

黑客

有一些解决方案允许您在 Assets Pineline 中使用 ActionView 助手:

资产管道中的路由助手 https://stackoverflow.com/questions/6725629/route-helpers-in-asset-pipeline

https://github.com/sstephenson/sprockets/issues/218 https://github.com/sstephenson/sprockets/issues/218

如何将 ActionView 助手包含在资产管道中? https://stackoverflow.com/questions/14284278/how-to-include-actionview-helpers-in-the-assets-pipeline

我的建议

如果您只需要有问题的链接或更多链接,则无需麻烦地破解。使用纯文本或 Javascript 帮助程序。这就够了。

//plain text
"<a href='#'>Sign up</a>"

//JS helper
Link = {}
Link.sign_up = "<a href='#'>Sign up</a>"
Link.link_to = (url, anchor) ->
  "<a href=\"#{url}\">#{anchor}</a>" 

console.log(Link.sign_up)
console.log(Link.link_to("#", "Sign up"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Rails 资产管道的 js.coffee 文件中使用 erb 时出错 的相关文章

随机推荐