【问题标题】:Reference rails image in jquery functionjquery函数中的参考rails图像
【发布时间】:2013-01-04 20:36:42
【问题描述】:

我有一个 jquery 函数,它应该改变页面的背景。我希望背景是 app/assets/images 目录中的图像。但是,我对使用资产管道引用图像的正确方法感到困惑。

这是我现在的行:

    $('body').css("background-image", "url('welcome.png')");

在url参数中访问图片的最佳方式是什么?

【问题讨论】:

  • 您目前使用的方法有什么问题?将相对于页面的路径放在括号之间:url('app/assets/images/welcome.png')
  • 你有 gem "jquery-rails" 吗?

标签: javascript jquery css ruby-on-rails asset-pipeline


【解决方案1】:

这在文档中有介绍:

http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

您应该使用“2.3.3 JavaScript/CoffeeScript and ERB”中描述的方法,这意味着将.erb扩展名添加到您的JS文件中,并使用asset_path。

另一种更优雅的方法是将图像移动到 css.scss 文件中的类定义中,然后在 jQuery 中添加该类:

.welcome {
  background-image: url(image-path('welcome.png'));
}

在你的 jQuery 中:

$('body').addClass("welcome");

【讨论】:

  • 这是一个很好的答案,在javascript中修复url的值没有问题。但是那个解决方案并不是那么好,当我看到这个(明显的)建议并改变主意时,我就是这样做的。谢谢。
【解决方案2】:

试试这个:

$('body').css("background-image", "url('/assets/welcome.png')");

为了访问管道中的资产,您必须指定assets 文件夹。

我一直试图找到我在哪里读到这篇文章,但 Rails 基本上会将所有资产帮助程序 url 转换为 /assets/asset.png/assets/stylesheet.css 这样的东西,所以你应该可以通过指定 assets 来做同样的事情源网址中的文件夹。

【讨论】:

  • 这个解决方案已经过时了,我会推荐下面@tirdadc 的答案。
【解决方案3】:

$('body').css("background-image", "url('/app/assets/images/welcome.png')");?

假设应用程序位于文档根目录。

【讨论】:

  • 当我这样做时,它只会抛出 404。
  • 如果没有您的文件结构和服务器配置,就无法提供帮助抱歉:/
  • 我认为您不需要指定完整的应用路径。
【解决方案4】:

在我看来,您需要使用 .erb(嵌入式 ruby​​)扩展来允许在您的 .js 文件中使用 rails 路径助手。如果你的js文件(比如balabala.js)在asset/javscripts/,改名为balabala.js.erb,然后使用:

$('body').css({"background-image":"<%= asset_path({'filenamehere.png') %>"});    

在你的asset/javscripts/application.js 中需要这个文件

//= require balabala

那么它应该可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2015-01-03
    • 2018-03-27
    • 2016-07-25
    • 2016-06-03
    相关资源
    最近更新 更多