Ruby on Rails复制了HTML中包含的JS文件

时间:2013-05-17 14:14:21

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

我应该首先提到我没有预编译。

我有8个不同的Js文件(7个,不包括Application.js),当我使用<%= javascript_include_tag 'application' %>时,它打印出来:

<script src="/assets/admin.js?body=1" type="text/javascript"></script>
<script src="/assets/brand.js?body=1" type="text/javascript"></script>
<script src="/assets/category.js?body=1" type="text/javascript"></script>
<script src="/assets/home.js?body=1" type="text/javascript"></script>
<script src="/assets/product.js?body=1" type="text/javascript"></script>
<script src="/assets/setting.js?body=1" type="text/javascript"></script>
<script src="/assets/user.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

因此,我的一些jQuery(使用Toggles)不起作用,因为它们被多次执行。

如何让它简单地使用application.js?

我的Application.js文件:

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require jquery.ui.all
//= require_tree .

4 个答案:

答案 0 :(得分:3)

除了像迈克所说的那样删除//= require_tree .。请尝试以下命令:

$ rake tmp:clear tmp:create assets:clean

这将清除您的临时文件&amp;缓存的资产文件。

此外,如果您只想要单个application.js而不是7 .js包含脚本标记。设置以下选项config/environments/development.rb

# Expands the lines which load the assets
  config.assets.debug = false

希望有所帮助

答案 1 :(得分:0)

//= require_tree .将所有内容加载到与该清单相同的目录中(.)。

如果要手动包含javascripts,只需删除该行。但是,如果您在每个页面上都包含所有javascript,请将该行留在那里并删除您的包含。

答案 2 :(得分:0)

你的问题是application.js因为行“// = require_tree”而加载当前目录中的所有js文件。并且您可能在不同页面中为html元素使用相同的名称(id和class),因此一种解决方案是继续使用“// = require_tree”。在您的application.js中,为页面中的每个元素指定唯一名称,另一个解决方案是删除“// = require_tree”。来自你的application.js并使用它:

<%= javascript_include_tag "application", controller_name %>

这里当你生成一个新的控制器时,rails会自动为你创建一个带有控制器名称的javascript文件,当你为javascript_include_tag添加“controller_name”选项时,我们将添加当前控制器的js文件,最后你将你的javascript指令放在这些文件切换控制器中,我们一起去。

我发现这种方法非常好,但是你可以在这里找到其他解决方案:

Rails 3.1 asset pipeline: how to load controller-specific scripts?

祝你好运;)

答案 3 :(得分:0)

我遇到了同样的问题。检查您是否没有添加application.html.erb其他js文件。因为如果你有//= require_tree。在application.js上它会添加所有内容,所以如果你在application.html.erb上添加它们,它们就会重复。