Rails 3.1:公共目录不再提供js资产页面加载后如何加载其他js文件?

问题描述

| 我使用一个jQuery插件,该插件在初始页面加载后从服务器加载另一个js文件。由于所有js资产都在Rails 3.1中串联在一起,并且公共目录不用于提供js资产,因此如何引用此文件?我放在哪里?     

解决方法

Sprockets加载路径中的每个资产均可在运行时访问。您可以在Rails控制台中使用以下命令查看加载路径
Rails.application.config.assets.paths
您可以在初始化程序中添加加载路径:
Rails.application.config.assets.paths << your_load_path
默认情况下,自动加载应用程序/资产/和供应商/资产/中的所有资产。这些资产必须位于目录内。资产/目录本身中的文件未加载。 您可以通过访问http://mydomain.com/assets/myscripts/hello.js加载位于2点的资产。 串联是一个单独的问题。链轮将在加载路径中查找您使用Sprockets
require
provide
指令指定的资产,并从中构建串联文件。     ,似乎没有简单的方法可以完成此操作。现在,在Rails 3.1中,JavaScript和CSS文件都被合并为单个文件,以发送到浏览器。这是使用Sprockets库完成的。 实现此目的的机制包括解析./app/assets/javascripts/application.js文件并查找Sprockets指令,该指令将告诉Sprockets在哪里找到相关文件。 新生成的Rails应用程序中的一个全新的application.js文件如下所示:
// FIXME: Tell people that this is a manifest file,real code should go into discrete files
// FIXME: Tell people how Sprockets and CoffeeScript works
//
//= require jquery
//= require jquery_ujs
//= require_tree .
这些看起来像是对JavaScript的注释,但被Sprockets视为指令,告诉其如何构建将交付给客户端的单个application.js。您可能会猜到,这是JavaScript文件中添加的“ 6”行。 似乎没有关于Sprockets指令的大量文档。但是,源代码已被很好地记录下来,并且很好地解释了可用的指令。
require_tree
指令以递归方式包含app / assets / javascripts目录中的所有文件。因此,可以通过创建子目录并将不需要的文件放在其中来实现所需的功能。然后您可以将
require_tree
更改为
require_path
。 替代方法是手动管理Sprockets包含的文件,每个所需的JavaScript文件都使用“ 10”。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...