是否可以操纵占位符,以便我不仅可以设置它们的内容,还可以按特定顺序添加/删除内容?例如:
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' %>
现在我想要一个特定 Controller 的布局,它可能需要添加更多 javascript 链接,或者可能完全删除它们。假设我只想在其他 javascripts 之后 添加一个文件。到目前为止,我得到了这个:
layouts/some_controller.html.erb(这是一个特定 Controller 的布局,它应该继承自应用程序布局):
<% content_for :javascripts do %>
<script src="/assets/some_javascript_that_depends_on_jquery.js" type="text/javascript"></script>
<% end %>
<%= render :template => 'layouts/application' %>
这行不通,因为它会将 some_javascript_that_depends_on_jquery.js 放在 :javascripts 占位符的开头,我需要它在末尾,因为它依赖于 jquery。
如果必须直接扩展基础布局并跟踪对应用程序布局所做的任何更改以将其也应用到特定于 Controller 的布局,那将是很糟糕的。
处理这种情况的推荐方法是什么?
最佳答案
在application.html.erb中,将content_for:javascripts的内容保留在partial
这里你的部分将有 <%= javascript_include_tag "应用程序"%>
然后,在其他布局中调用相同的部分以及其他 javascript。
另一种方式,
您可以调用一个具有如下散列的助手: js_files = {"application_controller"=> ["js_file_1"], "some_controller"=> ["js_file_1","js_file_2"]}
现在,获取 js 文件并在运行时根据内容中的 Controller 构造 javascript include 标记。
希望这会更加灵活。 抱歉没有格式化。
关于ruby-on-rails - Rails 3 嵌套布局 : how to add at the end?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9442207/