Javascript rails 4—始终包含所有Java脚本
我理解“为什么所有js/css文件都包含在rails资产管道中”的“为什么”部分 然而,这并不总是可取的,不是吗?例如,我有一个非标准布局,用于显示需要谷歌地图的项目。我不希望所有页面都包含所有的外部gmap库——这不是必需的,而且是浪费——但是如果我不在每个页面都包含它们,那么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_
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"