Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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
Jquery 为什么rails在所有控制器中加载所有javascript文件?_Jquery_Ruby On Rails - Fatal编程技术网

Jquery 为什么rails在所有控制器中加载所有javascript文件?

Jquery 为什么rails在所有控制器中加载所有javascript文件?,jquery,ruby-on-rails,Jquery,Ruby On Rails,我正在构建一个小型rails应用程序,我想使用jquery而不是coffeescript,因此我将所有生成的javascript文件重命名为.js 现在,我在这些js文件中添加的javascript似乎可以被我的所有控制器访问。例如,在myemployees.js的document.ready中添加一些内容,这将在我的所有视图中触发,而不仅仅是在EmployeeController中触发 这是为什么?是否有配置此功能的方法?您可以通过在app/views/layouts中创建不同的布局来包括不同

我正在构建一个小型rails应用程序,我想使用jquery而不是coffeescript,因此我将所有生成的javascript文件重命名为.js

现在,我在这些js文件中添加的javascript似乎可以被我的所有控制器访问。例如,在my
employees.js的
document.ready
中添加一些内容,这将在我的所有视图中触发,而不仅仅是在EmployeeController中触发


这是为什么?是否有配置此功能的方法?

您可以通过在
app/views/layouts
中创建不同的布局来包括不同的资产集

通过更改布局中的行
,可以包含不同的javascript文件。所有的js文件通常按组合到一个名为
application.js
的文件中,但您也可以单独包含它们,并为每个控制器甚至操作使用不同的布局


您可以将
layout:name\u of_layout
添加到控制器中,为控制器中的所有操作设置默认布局。如果希望每个操作具有不同的布局,可以将其作为选项传递给渲染函数:
render layout::name\u of_layout
。有关更多选项,请参阅上的边缘指南。

通过在
app/views/layouts
中创建不同的布局,可以包括不同的资产集

通过更改布局中的行
,可以包含不同的javascript文件。所有的js文件通常按组合到一个名为
application.js
的文件中,但您也可以单独包含它们,并为每个控制器甚至操作使用不同的布局


您可以将
layout:name\u of_layout
添加到控制器中,为控制器中的所有操作设置默认布局。如果希望每个操作具有不同的布局,可以将其作为选项传递给渲染函数:
render layout::name\u of_layout
。查看上的边缘指南以获取更多选项。

一个简单的解决方案是将
控制器
名称添加为
布局的
主体
标签

##layouts/application.html.erb
<body id="<%= params[:controller] %>">
  <%= yield %>
</body>

一个简单的解决方案是将
控制器
名称添加为
布局的
主体
标签

##layouts/application.html.erb
<body id="<%= params[:controller] %>">
  <%= yield %>
</body>

默认情况下,
app/assets/javascripts
文件夹中的所有javascript文件通过
require\u树导入
application.js
文件。
语句

//= require turbolinks
//= require_tree .
这意味着只要在主应用程序布局中引用
application.js
,所有文件都将被执行并可用

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
您可能遇到的第二个问题是
turbolinks
。Turbolinks通过使用Rails资产管道缓存资产,替换发生更改的区域,使web应用程序中的以下链接更快

不幸的是,这意味着默认情况下,一旦为某个页面加载了javascript文件,即使加载了另一个页面,它也会保持缓存(可用)

尽管Turbolinks有一些可以用来进一步指导javascript文件何时启动和何时不启动,但不幸的是,这些不允许我们指定希望启动脚本的确切页面


如果您非常关心这个事实,您可以将
'data-turbolinks-track'=>设置为false

默认情况下,
app/assets/javascripts
文件夹中的所有javascript文件通过
require\u树导入
application.js
文件。
语句

//= require turbolinks
//= require_tree .
这意味着只要在主应用程序布局中引用
application.js
,所有文件都将被执行并可用

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
您可能遇到的第二个问题是
turbolinks
。Turbolinks通过使用Rails资产管道缓存资产,替换发生更改的区域,使web应用程序中的以下链接更快

不幸的是,这意味着默认情况下,一旦为某个页面加载了javascript文件,即使加载了另一个页面,它也会保持缓存(可用)

尽管Turbolinks有一些可以用来进一步指导javascript文件何时启动和何时不启动,但不幸的是,这些不允许我们指定希望启动脚本的确切页面

如果您非常关心这个事实,您可以将
'data-turbolinks-track'=>设置为false

我想使用jquery而不是coffeescript

Jquery是一个框架。他们完全不同

您可以将JQuery与InUnity一起在Coffeescript中使用:

#test.coffee
$(".element").on "click", ->
   alert "test"

我的所有控制器似乎都可以访问这些js文件

这是由于:

以上是Rails应用程序的默认功能

这意味着您的所有JS/CSS资产都放在一个
application.CSS
/
application.JS
文件中(单个文件=更高效):

#app/views/layouts/application.html.erb
--

您要做的是从这个过程中排除一些文件

这样做非常简单:

#app/assets/javascripts/application.js
//= require_tree .
//= require_self
//= stub employees 

#app/views/layouts/application.html.erb
<%= javascript_include_tag :application, (:employees if controller_name == "employees" ) %>

#config/initializers/assets.rb
Rails.application.config.assets.precompile += %w( employees.js employees.css )
#app/assets/javascripts/application.js
//=需要一棵树。
//需要自己
//=存根员工
#app/views/layouts/application.html.erb
#config/initializers/assets.rb
Rails.application.config.assets.precompile+=%w(employees.js employees.css)
您必须在资产管道中单独包含“排除”文件(如上所述)

我想使用jquery而不是coffeescript

Jquery是一个框架。他们完全不同

您可以将JQuery与InUnity一起在Coffeescript中使用:

#test.coffee
$(".element").on "click", ->
   alert "test"

我的所有控制器似乎都可以访问这些js文件

这是由于:

以上是Rails应用程序的默认功能

这意味着您的所有JS/CSS资产都放在一个
application.CSS
/
application.JS
文件(单个文件)中
#app/assets/javascripts/application.js
//= require_tree .
//= require_self
//= stub employees 

#app/views/layouts/application.html.erb
<%= javascript_include_tag :application, (:employees if controller_name == "employees" ) %>

#config/initializers/assets.rb
Rails.application.config.assets.precompile += %w( employees.js employees.css )