Jquery 为什么rails在所有控制器中加载所有javascript文件?
我正在构建一个小型rails应用程序,我想使用jquery而不是coffeescript,因此我将所有生成的javascript文件重命名为.js 现在,我在这些js文件中添加的javascript似乎可以被我的所有控制器访问。例如,在myJquery 为什么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中创建不同的布局来包括不同
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 )