首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Grails Asset-Pipeline插件访问Javascript中的图像?

如何使用Grails Asset-Pipeline插件访问Javascript中的图像?
EN

Stack Overflow用户
提问于 2014-06-05 06:25:14
回答 4查看 9.9K关注 0票数 13

我刚刚升级到Grails 2.4,正在使用Asset-Pipeline1.8.7插件。我想知道如何从Javascript访问图像。我使用的是谷歌地图Javascript V3应用程序接口,需要在Javascript中设置一些标记图标。有没有办法使用标签在GSP上创建一些Javascript变量,然后在我的app.js代码中访问该文件?如果这是不可能的,那么如何引用资源中的编译图像呢?

EN

回答 4

Stack Overflow用户

发布于 2014-08-14 16:55:46

您可以定义一个全局可用的对象,该对象保存您的资产目录的根路径,并使用它来构建您的资产的URL。将此代码片段添加到布局head-section

代码语言:javascript
复制
<g:javascript>
    window.grailsSupport = {
        assetsRoot : '${ raw(asset.assetPath(src: '')) }'
    };
</g:javascript>

然后在其他地方使用它,如下所示:

代码语言:javascript
复制
<g:javascript>
    var pathToMyImg = window.grailsSupport.assetsRoot + 'images/google_maps_marker.png';
</g:javascript>

更新2015-08-06

在查看asset-pipeline plugin的发行说明时,我注意到非摘要版本的资产不再存储在WAR文件中。这意味着当应用程序部署为WAR时,我提出的解决方案会中断:

2015.5.31,2.2.3版本-不再在war文件中存储非摘要版本,将开销减半。还删除了Commons i/o依赖项。更快的字节流。

这意味着您必须事先显式定义所有图像,并且不再能够在脚本中动态构建路径:

代码语言:javascript
复制
<g:javascript>
    window.grailsSupport = {
        myImage1 : '${assetPath(src: 'myImage1.jpg')}',
        myImage2 : '${assetPath(src: 'myImage2.jpg')}'
    };
</g:javascript>    

更新2016-05-25

现在可以通过设置grails.assets.skipNonDigests (默认值为false)来配置构建的war文件中是否包含资产的非摘要版本:

通常不需要关闭“skipNonDigest”。Tomcat将通过非摘要名称自动为文件提供服务,并通过manifest.properties别名映射使用storagePath将它们复制出来。这只是将存储空间减少了一半。但是,如果您试图通过'target/assets‘的内容在cdn -pipeline pipeline插件之外上传到cdn。这可能仍然有用。

请注意,您仍然可以使用建议的解决方案预先定义所有必需的图像,以解决浏览器中的缓存问题(因为资源的摘要版本在文件名中具有其内容散列)。

票数 20
EN

Stack Overflow用户

发布于 2014-06-29 08:31:39

是的,您可以通过在gsp中添加一个${assetPath(src: 'img.png')}来实现。

票数 10
EN

Stack Overflow用户

发布于 2014-06-13 03:16:28

我不知道你的情况下理想的解决方案是什么,但一个解决方案可能是:

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24048628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档