是否可以操作占位符,以便我不仅可以设置其内容,还可以按特定顺序添加/删除内容?例如:Rails 3嵌套布局:如何在最后添加?
布局/ 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>
布局/ 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中只添加一个文件。到目前为止,我得到这个:
布局/ 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' %>
这是行不通的,因为它会将some_javascript_that_depends_on_jquery.js放置在:javascripts占位符的开头,我最终需要它,因为它取决于jquery。
直接扩展基本布局并跟踪对应用布局所做的任何更改以将其应用于控制器特定的布局也是非常困难的。
建议如何处理这种情况?
我可能只是将控制器javascripts重命名为local_javascripts,并在基地中产生,但我想这就是你想要避免的。 (或者local_header也许?我发现自己也想有时间使用“本地”样式表。) – froderik 2012-02-25 07:39:10
@froderik这样做会工作,但感觉不对,并且一旦我需要更多控制器特定的布局。 – HappyDeveloper 2012-02-25 07:50:49