2016-07-24 4 views
1

Я использую chessboard-0.3.0.js в приложении rails. Из-за работы с конвейером ресурсов rails мне пришлось отредактировать каждую часть кода js, которая отображает изображение, например, Pieces. Линия 445 из chessboard.js говоритПереименование моего файла на .js.erb позволяет мне писать erb внутри javascript, но не javascript внутри erb

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

, который, конечно, будет представлять проблему для рельсов, так что я переименовал шахматную доску с .erb расширением и изменил эту строку в

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

после сдачи всех требуемые изображения в папке «Ресурсы/изображения».

Моя проблема в том, что изображения по-прежнему не отображаются, я догадался, из-за того, что в этой строке помещен {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

Я думаю, что самый простой способ - включить ваши шахматные фигуры прямо в/публичный, чтобы они не хешировали. Вероятно, они не изменятся, если они из внешней библиотеки, поэтому вам не нужно беспокоиться о кешировании.

+0

Я думаю, это будет работать как альтернатива, а id использовать его только в качестве последнего средства. Однако я буду ждать других ответов. Я приму этот ответ, если нет лучшего способа. Большое спасибо. – Mordred