Ответ 1
Вы можете определить глобально доступный объект, который содержит корневой путь к вашему ресурсу dir и использовать его для создания URL-адресов для ваших активов. Добавьте этот фрагмент к разделу макетов
<g:javascript>
window.grailsSupport = {
assetsRoot : '${ raw(asset.assetPath(src: '')) }'
};
</g:javascript>
Затем используйте его в другом месте:
<g:javascript>
var pathToMyImg = window.grailsSupport.assetsRoot + 'images/google_maps_marker.png';
</g:javascript>
Обновление 2015-08-06
Проверяя примечания к выпуску плагина для конвейера активов, я заметил, что неперевариваемые версии активов больше не хранятся в WAR- файл. Это означает, что мое предлагаемое решение ломается, когда приложение развертывается как WAR:
31 мая 2015 г. 2.2.3 Release - больше не хранит версии без дайджеста в военном файле, сокращая накладные расходы наполовину. Также удалена зависимость от входа в Commons. Более быстрый поток байтов.
Это означает, что вы должны явно определить все свои изображения заранее и больше не можете динамически строить путь в своих скриптах:
<g:javascript>
window.grailsSupport = {
myImage1 : '${assetPath(src: 'myImage1.jpg')}',
myImage2 : '${assetPath(src: 'myImage2.jpg')}'
};
</g:javascript>
Обновление 2016-05-25
Теперь можно настроить, если в встроенный war файл включены неперевариваемые версии активов, установив grails.assets.skipNonDigests
(по умолчанию - false
):
Обычно нет необходимости отключать "skipNonDigests". Tomcat автоматически по-прежнему будет обслуживать файлы неважным именем и копирует их с помощью storagePath с помощью карты псевдонима
manifest.properties
. Это просто сокращает объем хранения пополам. Однако, если вы пытаетесь сделать что-то вроде загрузки в cdn за пределами плагина cdn-asset-конвейер и через содержимое "target/assets". Это может быть полезно.
Обратите внимание, что вы все равно можете использовать предлагаемое решение для предварительного определения всех необходимых изображений, чтобы обойти проблемы кэширования в браузере (поскольку дайджест-версия актива имеет свой хэш-содержимое в имени файла).