如何使用Grails资产管道插件从Javascript访问图像?
我刚刚升级到Grails2.4,正在使用Asset-Pipeline1.8.7插件。我想知道如何从Javascript访问图像。我正在使用Google Maps Javascript V3 API,需要在Javascript中设置一些标记图标。有没有办法使用标记在GSP上创建一些Javascript变量,然后在my app.js代码中访问该文件?如果不可能,如何在资源中引用已编译的映像 我不知道您的理想解决方案是什么,但解决方案可能是:如何使用Grails资产管道插件从Javascript访问图像?,javascript,grails,asset-pipeline,Javascript,Grails,Asset Pipeline,我刚刚升级到Grails2.4,正在使用Asset-Pipeline1.8.7插件。我想知道如何从Javascript访问图像。我正在使用Google Maps Javascript V3 API,需要在Javascript中设置一些标记图标。有没有办法使用标记在GSP上创建一些Javascript变量,然后在my app.js代码中访问该文件?如果不可能,如何在资源中引用已编译的映像 我不知道您的理想解决方案是什么,但解决方案可能是: 在js代码中使用相对路径,如“../assets/Use
data imgpath=“${asset.assetPath(src:'use control.png')}”
属性,并使用此链接是的,您可以在gsp中放置一个
${assetPath(src:'img.png')}
,您可以定义一个全局可用的对象,该对象保存资产目录的根路径,并使用它来构建资产的URL。
将此代码段添加到布局标题部分
<g:javascript>
window.grailsSupport = {
assetsRoot : '${ raw(asset.assetPath(src: '')) }'
};
</g:javascript>
window.grailsSupport={
AssetRoot:“${raw(asset.assetPath(src:”)}”
};
然后像这样在其他地方使用它:
<g:javascript>
var pathToMyImg = window.grailsSupport.assetsRoot + 'images/google_maps_marker.png';
</g:javascript>
var pathToMyImg=window.grailsSupport.assetroot+'images/google_maps_marker.png';
更新2015-08-06
在查看的发行说明中,我注意到资产的非摘要版本不再存储在WAR文件中。这意味着,当应用程序部署为WAR时,我建议的解决方案会中断:
2015年5月31日
2.2.3版本-不再在war文件中存储非摘要版本,将开销减少一半。还删除了Commons i/o依赖项。更快的字节流
这意味着您必须事先明确定义所有图像,并且不再能够在脚本中动态构建路径:
<g:javascript>
window.grailsSupport = {
myImage1 : '${assetPath(src: 'myImage1.jpg')}',
myImage2 : '${assetPath(src: 'myImage2.jpg')}'
};
</g:javascript>
window.grailsSupport={
myImage1:“${assetPath(src:'myImage1.jpg')}”,
myImage2:“${assetPath(src:'myImage2.jpg')}”
};
更新2016-05-25
现在可以通过设置grails.assets.skipNonDigests
(默认值为false
),配置构建的war文件中是否包含资产的非摘要版本:
通常不需要关闭“SkipOnDigests”。Tomcat仍将自动按非摘要名称提供文件,并将使用storagePath通过manifest.properties
别名映射将其复制出去。这只会将存储量减少一半。但是,如果您试图在cdn资产管道插件之外通过“target/assets”的内容上传到cdn。这可能仍然有用
请注意,您仍然可以使用建议的解决方案预先定义所有必需的图像,以解决浏览器中的缓存问题(因为资产的摘要版本在文件名中有其内容哈希)。作为替代方案,您可以使用HTML5的data-*属性。
我在这里进一步解释:
您是否在javascripts中使用过资源插件taglib?或者类似于
${resource(dir:,file:)}
?我使用了Resources插件,但找不到访问app.js文件中图像位置的方法?对于Grails2.4,我使用的是资产管道管理器,但问题是相同的。我看到了一个例子,他们使用g:javascript标记在GSP中声明了一个JS变量,但是我的app.JS仍然无法引用这个变量。使用资源插件taglib和资源方法(这是本机grails方法,而不是来自插件),您的根从WEB-APPS开始。使用资产管道插件taglib和assetPath方法,根目录从grails app/assets开始。看看我下面的例子。该文件位于文件夹/grails-app/assets/stylesheets/style.css
中,我在代码中使用它:assetPath(src:“stylesheets/style.css”)
或作为视图中的标记:
与资源相同此答案有效,我无法投票,因为我没有足够的信誉点。我也喜欢这个答案,但是我不能投票,因为我也没有足够的声望点数。好答案,但我没有足够的声望点数来投票。到目前为止,这是最简单和最直接的答案。@davydotcom,我如何在javascript文件和样式表文件上使用${assetPath(src:'img.png')}?我使用的是grails:assets:url:storagePath:/opt/domain/assets/