是否可以操作占位符以便我不仅可以设置其内容,还可以按特定顺序添加/删除内容?例如:
layouts / base.html.erb(基础布局意味着扩展):
<!DOCTYPE html>
<html>
<head>
<title><%= yield :title %></title>
<%= yield :stylesheets %>
<%= yield :javascripts %>
<%= yield :csrf %>
</head>
<body>
<div class='container-fluid'>
<%= yield :header %>
<%= content_for?(:content) ? yield(:content) : yield %>
<%= yield :footer %>
</div>
</body>
</html>
layouts / application.html.erb(这是我将在我的应用程序的大部分内容中使用的布局,它继承自基本布局):
<% content_for :stylesheets do %>
<%= stylesheet_link_tag "application", :media => "all" %>
<% end %>
<% content_for :javascripts do %>
<%= javascript_include_tag "application" %>
<% end %>
<% content_for :csrf do %>
<%= csrf_meta_tags %>
<% end %>
<%= render :template => 'layouts/base' %>
现在我想要一个特定控制器的布局,可能需要添加更多的javascript链接,或者可能完全删除它们。假设我想在其他javascripts之后只添加一个文件。到目前为止我得到了这个:
layouts / some_controller.html.erb(这是特定控制器的布局,它应该从应用程序布局继承):
<% content_for :javascripts do %>
<script src="/assets/some_javascript_that_depends_on_jquery.js" type="text/javascript"></script>
<% end %>
<%= render :template => 'layouts/application' %>
这不会起作用,因为它会在:javascripts占位符的开头放置some_javascript_that_depends_on_jquery.js,最后我需要它,因为它依赖于jquery。
必须直接扩展基本布局,并跟踪对应用程序布局所做的任何更改,以便将其应用于特定于控制器的布局。
处理这种情况的推荐方法是什么?
答案 0 :(得分:0)
在application.html.erb中,将content_for:javascripts的内容保留在部分
中这里你的部分将有 &lt;%= javascript_include_tag“application”%&gt;
然后,除了其他布局中的其他javascripts之外,再调用相同的部分。
另一种方式,
你可以调用一个有这样一个哈希的助手: js_files = {“application_controller”=&gt; [“js_file_1”],“some_controller”=&gt; [ “js_file_1”, “js_file_2”]}
现在,获取js文件并根据内容中的控制器在运行时构建javascript include标记。
希望这会更灵活。 抱歉没有格式化。
答案 1 :(得分:0)
每个控制器始终保留一个js文件。
<%= javascript_include_tag params[:controller] %>
让我们以users
控制器为例,然后会有users.js.coffee
个文件。
如果你想为用户控制器提供多个js文件,那么你可以在users.js.coffee文件中要求这些文件
vi users.js.coffee
//= require 'a'
//= require 'b'
/* my extra js code will go here */
答案 2 :(得分:0)
这不能像在其他框架中那样完成,只需扩展布局,然后随意修改继承的块。
Rails有点迫使你保持简单。