Mik*_*evz 76 assets ruby-on-rails ruby-on-rails-3.1 sprockets asset-pipeline
如果我在Rails 3.1中生成一个新的控制器,也会自动添加一个带有控制器名称的javascript文件.首先,我认为这个javascript文件只会在调用相关控制器时使用.
默认情况下//= require_tree .,application.js-file中有指令,包括树上的每个javascript文件.
我怎么才能加载控制器特定的脚本?
Ngu*_*ong 122
要仅加载必要的name_of_the_js_file.js文件:
除去//=require_tree从application.js
在资产管道中保留您的js文件(在加载特定页面时要加载)
添加帮助器 application_helper.rb
def javascript(*files)
content_for(:head) { javascript_include_tag(*files) }
end
Run Code Online (Sandbox Code Playgroud)屈服于您的布局:
<%= yield(:head) %>
Run Code Online (Sandbox Code Playgroud)在视图文件中添加:
<% javascript 'name_of_the_js_file' %>
Run Code Online (Sandbox Code Playgroud)那应该没问题
alb*_*uer 83
一个优雅的解决方案是在javascript_include_tag中要求controller_name
请参阅http://apidock.com/rails/ActionController/Metal/controller_name/class
<%= javascript_include_tag "application", controller_name %>
Run Code Online (Sandbox Code Playgroud)
controller_name.js将被加载并且也在资产中,因此您可以从此处获取其他文件.
例如,渲染汽车#index将给出
<%= javascript_include_tag "application", "cars" %>
Run Code Online (Sandbox Code Playgroud)
cars.js可以包含的地方
//= require wheel
//= require tyre
Run Code Online (Sandbox Code Playgroud)
请享用 !
Le *_*Duy 28
我总是在布局文件中包含这个.它可以将你的js范围用于行动
<%= javascript_include_tag params[:controller] if AppName::Application.assets.find_asset("#{params[:controller]}.js") %>
<%= javascript_include_tag "#{params[:controller]}_#{params[:action]}" if AppName::Application.assets.find_asset("#{params[:controller]}_#{params[:action]}.js") %>
Run Code Online (Sandbox Code Playgroud)
您的问题可以通过不同方式解决.
请注意,这不是生产模式的好解决方案,因为您的控制器细节不会被预编译!
向我们的应用程序助手添加以下方法:
module ApplicationHelper
def include_related_asset(asset)
# v-----{Change this}
if !YourApp::Application.assets.find_asset(asset).nil?
case asset.split('.')[-1]
when 'js'
javascript_include_tag asset
when 'css'
stylesheet_link_tag asset
end
end
end
end
Run Code Online (Sandbox Code Playgroud)在layout-file中调用helper方法:
<%= include_related_asset(params[:controller].to_param + '_' + params[:action].to_param . 'js') %>
Run Code Online (Sandbox Code Playgroud)为控制器操作创建特定资产.E. g.controller_action.js
请不要忘记更改YourApp为您的应用程序的名称.
yield<%= yield :head%>到您的布局头在操作视图中包含您的资源:
<% content_for :head do %>
<%= javascript_include_tag 'controller_action' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)有关详细信息,请参阅Rails指南.
| 归档时间: |
|
| 查看次数: |
36227 次 |
| 最近记录: |