将文件重命名为.js.erb允许我在javascript中编写erb,但不能在erb中编写javascript

将文件重命名为.js.erb允许我在javascript中编写erb,但不能在erb中编写javascript,javascript,ruby-on-rails,ruby,chessboard.js,Javascript,Ruby On Rails,Ruby,Chessboard.js,我正在rails应用程序上使用chessboard-0.3.0.js。由于rails资产管道的问题,我不得不编辑渲染图像的js代码的每一部分,例如片段。 chessboard.js的第445行说 cfg.pieceTheme = 'img/chesspieces/wikipedia/{piece}.png' 这当然会给rails带来问题,所以我用.erb扩展名重命名了chessboard,并将该行更改为 cfg.pieceTheme = <%= asset_path('chesspi

我正在rails应用程序上使用chessboard-0.3.0.js。由于rails资产管道的问题,我不得不编辑渲染图像的js代码的每一部分,例如片段。 chessboard.js的第445行说

cfg.pieceTheme =  'img/chesspieces/wikipedia/{piece}.png'
这当然会给rails带来问题,所以我用.erb扩展名重命名了chessboard,并将该行更改为

cfg.pieceTheme =  <%= asset_path('chesspieces/wikipedia/{piece}.png') %> 
cfg.pieceTheme=
将所有必需的图像放入“资源/图像”文件夹后

我这里的问题是图像仍然没有被渲染,我猜这是因为
{piece}.png
被放置在那一行中,基本上是js在rails助手中,对吗?我想这就是为什么我的图像不能被渲染的原因。 当然,我可以阅读全部“几乎2000”行代码,并尝试找出一种方法来逐个访问每个图像,但我可以在这一过程中打破其他一些东西,对于像我这样的初学者来说,管理2k行代码并不有趣


有没有一种方法可以在不重写代码更好部分的情况下修复此问题???

我想最简单的方法是将您的棋子直接包含到/public中,这样它们就不会散列。如果来自外部库,它们可能不会改变,因此您无需担心缓存问题。

有一种替代方法需要重写一些js

基本上,代码不起作用的原因是erb在渲染之前编译,而js在渲染之后执行,因此asset_路径不正确且不是动态的

您可以创建一个列出所有可用路由的对象,然后使用该对象插入路径名

假设你的循环是

var piecesList = [
  "first",
  "second"
]
$.each(var piece in piecesList) function(piece) {
  var image_path = "img/path/{piece}.png"
}
您可以像这样手动指定对象中的所有这些部分

   var piecesRoutes = {
     "first" : "<%= image_path('chesspieces/first.png') %>",
     "second" : "<%= image_path('chesspieces/second.png') %>",
   }

请尝试
cfg.pieceTheme=”“
。请注意引号。谢谢,但这不起作用。我想这是一个替代方案,我只能作为最后的手段。不过,我想等待其他答案。如果没有更好的办法,我会接受这个答案。非常感谢。谢谢,尽管我需要一些时间来整理代码,并在第445行找到实际调用代码的循环。。但这似乎是可行的。非常感谢。
var image_path = piecesRoutes[piece]