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

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

问题描述:

我在rails应用程序上使用chessboard-0.3.0.js。由于轨道资产管道的事情,我不得不编辑渲染图像的js代码的每一部分,例如Pieces。 chessboard.js的 线445说将我的文件重命名为.js.erb允许我在JavaScript中编写erb,但不在erb中编写javascript

cfg.pieceTheme = 'img/chesspieces/wikipedia/{piece}.png' 

这当然会对钢轨的一个问题,所以我改名为棋盘与.erb延伸和改变该行

cfg.pieceTheme = <%= asset_path('chesspieces/wikipedia/{piece}.png') %> 

把所有后assets/images文件夹中所需的图像。

这里我的问题是,图像仍然没有得到渲染,我猜想它的方式{piece}.png放在那一行,这基本上是js里面的铁轨助手,对不对?我认为这就是为什么我的图像不能被渲染。 当然,我可以读取整个'将近2000行'的代码,并尝试找出一种接一个地访问每个图像的方法,但是我可能会沿途破坏其他某些内容,2k行无法管理对于像我这样的初学者来说。

有没有办法解决这个问题,而不重写代码的更好的部分?

+0

尝试'cfg.pieceTheme =“”'。请注意引号。 – Aetherus

+0

谢谢,但没有任何工作要么 – Mordred

有一个替代方案需要重写一些js。

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

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

假设你的循环是一样的东西

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') %>", 
    } 

然后在循环,叫他们像这样

var image_path = piecesRoutes[piece] 
+0

谢谢,虽然我需要一些时间来对代码进行排序,并找到实际上在445行调用代码的循环。但是,这看起来好像可以工作。谢谢! – Mordred

我想最简单的方法是将你的棋子直接放入/ public,这样他们就不会被散列。如果来自外部库,它们可能不会改变,所以你不需要担心缓存。

+0

我想这可以作为替代和id只使用它作为最后的手段。但我想等待其他答案。如果没有更好的方法,我会接受这个答案。非常感谢你。 – Mordred