我有一个外部javascript插件,有很多类似于这样的代码,其中的image属性是动态构建的。
$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src='" + folderAssets + "/shadow_fx.png' />");使用rails 4.1+,我将预编译此外部代码提供的相关映像和资产以及上面的引用。当然,图像无法在生产中加载,因为使用直接的src属性不能捕获经过消化和预编译的图像的指纹。
如何正确地从外部的asset_url javascript文件而不是css文件中调用方法(它使用摘要输出正确的资产文件名)?(这个javascript不是restful模板js.erb文件,而是清单中包含的js文件。)
另外,是否有一种优雅的方法来处理和重构这个问题?
发布于 2014-11-03 11:48:53
退房2.3.3 JavaScript/CoffeeScript and ERB。您需要将.js更改为.js.erb扩展,例如:.js.erb然后,您可以这样使用它:
$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src='<%= asset_path('shadow_fx.png') %>' />");或者:
var image = $("<%= image_tag 'shadow_fx.png', :class => 'fx_shadow' %>");
image.attr('id', 'shd_'+i);
$prod.append(image);在第二个选项中,您必须将image_tag作为图像元素,然后向其添加id属性,因为i是JavaScript变量,这就是为什么必须将其添加到单独的行中。
发布于 2014-11-03 11:45:48
解决方案1
添加一个函数
function imagePath(image){
return "http://" + window.location.host + "/assets/"+ image;
}
$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src=imagePath(image) />");解决方案2
将文件从js更改为js.erb
$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src='<%= asset_path('shadow_fx.png') %>' />");https://stackoverflow.com/questions/26713011
复制相似问题