Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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—始终包含所有Java脚本_Javascript_Ruby On Rails_Asset Pipeline - Fatal编程技术网

Javascript rails 4—始终包含所有Java脚本

Javascript rails 4—始终包含所有Java脚本,javascript,ruby-on-rails,asset-pipeline,Javascript,Ruby On Rails,Asset Pipeline,我理解“为什么所有js/css文件都包含在rails资产管道中”的“为什么”部分 然而,这并不总是可取的,不是吗?例如,我有一个非标准布局,用于显示需要谷歌地图的项目。我不希望所有页面都包含所有的外部gmap库——这不是必需的,而且是浪费——但是如果我不在每个页面都包含它们,那么map.js.coffee文件中对google api的调用将抛出错误 有没有办法强制将map.js.coffee仅显示在maps视图上 注意application.html.sim中的一行: = javascript_

我理解“为什么所有js/css文件都包含在rails资产管道中”的“为什么”部分

然而,这并不总是可取的,不是吗?例如,我有一个非标准布局,用于显示需要谷歌地图的项目。我不希望所有页面都包含所有的外部gmap库——这不是必需的,而且是浪费——但是如果我不在每个页面都包含它们,那么
map.js.coffee
文件中对google api的调用将抛出错误


有没有办法强制将
map.js.coffee
仅显示在
maps
视图上

注意application.html.sim中的一行:

= javascript_include_tag "application"
您希望在不同的布局map.html.slim中包含一组不同的Java脚本,然后创建另一个javascript文件,例如map.js.coffee,并且在该文件中只包含您需要的文件。现在布局文件需要使用这个

= javascript_include_tag "map"

有一种解决方案,
javascript\u include\u标记

# assets/javascripts/
#          user.js.coffee
#          form.js.coffee
#          map.js.coffee

# views/users/location.html.haml
= javascript_include_tag 'map'
但是定义
/=require_树。
assets/application.js
中的
包含所有js文件,对吗

这样做会包含两次文件,对吗



更新:遵循此RailsCast(),我们可能能够创建一个包含所有“共享”js文件的公用文件夹,并要求它:
/=require\u tree./public

将其他答案建议的内容与web上的其他来源相结合,似乎解决这种情况的最好办法是采取以下措施:

assets/javascripts
assets/stylesheets
目录以及
maps.js
maps.css
文件中创建子目录。在我上面的例子中,你应该

app/
    assets/
        javascripts/
            application.js
            maps.js 
            maps/
            site/
        stylesheets/
            application.css
            maps.css
            maps/
            site/
在这些目录中创建任何需要的特定于页面的Java脚本/样式表

maps.js
文件如下所示:

//= require_tree ./maps
其中将包括地图目录/子目录中的所有项目

application.js
是相同的,但包括“主要”站点资源以及任何特定于站点的项目:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap
//= require_tree ./site
创建一个名为
views/layouts/maps.html.erb
的地图布局文件,并在布局文件中,使用
javascript\u include\u标记
更改解析包含的js/css文件:

视图/布局/maps.html.erb:

<%= stylesheet_link_tag    "maps", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "maps", "data-turbolinks-track" => true %>
<%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

+我有类似的问题。我已经用JS修复了它,检查父元素是否存在——如果存在,我运行GoogleMap的脚本。但我不确定这是不是正确的方法。“这不是必要的,只是浪费”,不,这不是浪费。关键是你有一个可缓存的JavaScript包,不管你在你的网站上浏览了多少页,它只需要下载一次。@Yoshiji先生——我认为这是正确的方法。我认为您应该在
assets/javascripts
css
目录中创建两个目录,一个用于
map
,另一个用于
everything
然后在
maps.js
文件中使用
/=require\u-tree-map
。您还需要更改
layouts/map.html.erb
以使用
true%>
您能试试并告诉我@user101289的运行情况吗?我今天无法测试,我的工作任务太多,我无法尝试这个选项。。。
class MapsController < ApplicationController
    layout "maps"