Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript可以';找不到图像文件(Rails 4应用程序)_Javascript_Ruby On Rails_Image_Google Maps_Asset Pipeline - Fatal编程技术网

javascript可以';找不到图像文件(Rails 4应用程序)

javascript可以';找不到图像文件(Rails 4应用程序),javascript,ruby-on-rails,image,google-maps,asset-pipeline,Javascript,Ruby On Rails,Image,Google Maps,Asset Pipeline,我有一个RubyonRails4应用程序。在app/assets/javascripts中,我创建了一个文件map.js,在谷歌地图上绘制一些自定义标记: var marker = new google.maps.Marker({ draggable: false, title: 'Hi', icon: 'icon1.png' }); 一切正常,只是它找不到icon.png,并给我错误消息ActiveRecord::RecordNotFound(找不到id=icon1的用户)。问题

我有一个RubyonRails4应用程序。在
app/assets/javascripts
中,我创建了一个文件
map.js
,在谷歌地图上绘制一些自定义标记:

var marker = new google.maps.Marker({
  draggable: false,
  title: 'Hi',
  icon: 'icon1.png'
});
一切正常,只是它找不到
icon.png
,并给我错误消息
ActiveRecord::RecordNotFound(找不到id=icon1的用户)
。问题很可能是如何写入文件地址,因为如果我将代码更改为
icon:'https://maps.google.com/mapfiles/kml/shapes/schools_maps.png“
一切都很完美,它在地图上显示了标记。 我怎样才能找到解决问题的方法?我查看了
log/development
,但没有发现任何有用的东西。 我应该把icon1.png放在哪里?应该如何引用它的地址

请注意,我不能在
map.js
中使用rails助手等


非常感谢。

如果您想在js文件中使用图像,那么首先您必须将js文件更改为
maps.js.erb
,然后您可以访问允许您访问图像的资产,因此您可以将其保存在js文件中

var marker = new google.maps.Marker({
  draggable: false,
  title: 'Hi',
  icon: "<%= asset_path('icon1.png') %>"  //this will look for an image "icon1.png" in assets/images
});
var marker=new google.maps.marker({
可拖动:错误,
标题:"嗨",,
图标:“”//这将在资源/图像中查找图像“icon1.png”
});
编辑:

基本上是连接资源,这可以减少浏览器发出的请求数量。如果你看一下导轨,它会说

Sprockets将所有JavaScript文件连接到一个master.js文件中,并将所有CSS文件连接到一个master.CSS文件中。Rails在每个文件名中插入MD5指纹,以便web浏览器缓存该文件

因此,您不能通过静态url指定资产路径,因此我们使用
rails asset\u path
,这将为您的资产创建合适的url

您可以尝试使用gem

在application.js中

//= require app_assets
此指令在全局范围中添加方法资产路径

添加到过滤器文件
*.png
。为此,请添加初始化器:

# config/initializers/js_assets.rb

JsAssets::List.allow << '*.png'

谢谢那么,在不更改为
.js.erb
的情况下,是否有任何方法可以做到这一点?是否存在任何不利因素(性能、速度等较低)要在
app/assets/javascripts
中使用
.js.erb
?@user2725109更新了我的答案,我们也使用了
,因此这将在你的
app/assets/images
中查找图像
icon1.png
,而不是
图标.png
,非常感谢你的帮助和解释。谢谢。@user2725109很高兴我能帮助你:)
var marker = new google.maps.Marker({
    draggable: false,
    title: 'Hi',
    icon: asset_path('icon1.png')
});