来自javascript css的rails资源url

来自javascript css的rails资源url,javascript,ruby-on-rails,asset-pipeline,assets,helper,Javascript,Ruby On Rails,Asset Pipeline,Assets,Helper,我有一个外部javascript插件,有很多这样的代码,其中image src属性是动态构建的 $prod.append("<img class='fx_shadow' id='shd_" + i + "' + src='" + folderAssets + "/shadow_fx.png' />"); $prod.append(“”); 使用rails 4.1+,我将预编译此外部代码提供的相关映像和资产以及上面的引用。很自然,图像无法在生产中加载,因为使用直接src属性不会捕获

我有一个外部javascript插件,有很多这样的代码,其中image src属性是动态构建的

$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src='" + folderAssets + "/shadow_fx.png' />");
$prod.append(“”);
使用rails 4.1+,我将预编译此外部代码提供的相关映像和资产以及上面的引用。很自然,图像无法在生产中加载,因为使用直接src属性不会捕获摘要和预编译图像的指纹

如何从外部javascript文件而不是css文件正确调用
asset\u url
方法(该方法会输出正确的资产文件名和摘要)?(此javascript不是restful模板js.erb文件,而是清单中包含的js文件。)

另外,是否有一种优雅的方法来处理和重构此问题?

解决方案1 添加一个函数

function imagePath(image){
    return "http://" + window.location.host + "/assets/"+ image;
}

$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src=imagePath(image) />");
结帐。您需要将
.js
更改为
.js.erb
扩展名,例如:javascript\u filename.js.erb。然后您可以这样使用它:

$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src='<%= asset_path('shadow_fx.png') %>' />");
$prod.append(“/>”);
或:

var image=$(“'fx\u shadow”%>”);
image.attr('id','shd_'+i);
$prod.append(图像);

在第二个选项中,您必须将
image\u标记
作为image元素,然后向其添加
id
属性,因为
i
是一个JavaScript变量,这就是为什么必须在单独的行中添加它。

JavaScript的文件扩展名是.js还是.js.erb?js。我应该将其更改为使用js.erb?是的,将其更改为
.js.erb
,然后:
$prod.append(“/>”)
我不确定这是否可行,但也尝试这样做:
$prod.append(“'fx\u shadow“%”)
$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);