【问题标题】:rails asset-url from javascript css来自javascript css的rails资产URL
【发布时间】:2014-12-30 00:52:44
【问题描述】:

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

$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src='" + folderAssets + "/shadow_fx.png' />");

使用 rails 4.1+,我正在预编译此外部代码提供和上面引用的相关图像和资产。自然,图像无法在生产环境中加载,因为使用直接 src 属性不会捕获消化和预编译图像的指纹。

如何从外部 javascript 文件而不是 css 文件中正确调用 asset_url 方法(它会输出带有摘要的正确资产文件名) ? (这个javascript不是restful模板js.erb文件,而是manifest中包含的js文件。)

另外,有没有一种优雅的方法来处理和重构这个?

【问题讨论】:

  • 您的 JavaScript 文件扩展名是 .js 还是 .js.erb?
  • js。我应该将其更改为使用 js.erb?
  • 是的,将其更改为.js.erb,然后:$prod.append("&lt;img class='fx_shadow' id='shd_" + i + "' + src='&lt;%= asset_path('shadow_fx.png') %&gt;' /&gt;");
  • 如果这行得通,我不是,但也尝试这样做:$prod.append("&lt;%= image_tag 'shadow_fx.png', :class =&gt; 'fx_shadow' %&gt;");

标签: javascript ruby-on-rails asset-pipeline assets helper


【解决方案1】:

解决方案 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') %>' />");

【讨论】:

    【解决方案2】:

    结帐2.3.3 JavaScript/CoffeeScript and ERB。您需要将.js 更改为.js.erb 扩展名,例如:javascript_filename.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-12-29
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多