2016-07-24 58 views
1

我在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 =「<%= asset_path('chesspieces/wikipedia/{piece} .png')%>」'。請注意引號。 – Aetherus

+0

謝謝,但沒有任何工作要麼 – Mordred

回答

1

有一個替代方案需要重寫一些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

0

我想最簡單的方法是將你的棋子直接放入/ public,這樣他們就不會被散列。如果來自外部庫,它們可能不會改變,所以你不需要擔心緩存。

+0

我想這可以作爲替代和id只使用它作爲最後的手段。但我想等待其他答案。如果沒有更好的方法,我會接受這個答案。非常感謝你。 – Mordred

相關問題