【问题标题】:Ruby on rails: Yielding specific views in a specific places in the layoutRuby on rails:在布局的特定位置产生特定视图
【发布时间】:2011-11-22 16:08:06
【问题描述】:

如果我有一个<%= yield %> 标签,那么我的所有视图都会呈现在布局中的同一个位置。我可以为不同的视图设置不同的<%= yield %> 标签吗?那么我该怎么做呢?谢谢

【问题讨论】:

  • 包含内容的视图在哪个文件夹中是否重要?视图来自哪个控制器呢?

标签: ruby-on-rails ruby layout view yield


【解决方案1】:

查看ActionView::Helpers::CaptureHelper。你可以在你的视图中做这样的事情:

<% content_for :sidebar do %>
  <!-- sidebar content specific to this page -->
<% end %>

这将在 content_for 块内运行模板,但不会作为常规模板 yield 缓冲区的一部分输出,它将存储在单独的缓冲区中以备后用。然后稍后,包括在布局中,您可以使用yield :content_name 来输出内容:

<div class="content">
    <%= yield %>
</div>

<div class="sidebar">
    <%= yield :sidebar %>
</div>

因此,从某种意义上说,您可以为不同的视图使用不同的 yields,您只需在视图中为不同的内容命名为 content_for,并在布局中使用相同的名称生成它。

考虑您的情况,您希望在不同的地方获得不同的视图。假设您有三个面板,面板 1、面板 2 和面板 3。您可以在布局中执行此操作:

<div id="panel1"><%= yield :panel1 %></div>
<div id="panel2"><%= yield :panel2 %></div>
<div id="panel3"><%= yield :panel3 %></div>

如果你不想,你甚至不需要包含一个普通的&lt;%= yield %&gt;。然后在您的视图中,您可以通过使用适当的content_for 包围整个视图来选择在哪个面板中显示内容。例如,您的一个视图可能会这样更改:

<% content_for :panel2 do %>
    <!-- Your View -->
<% end %>

在面板 2 中显示。另一个可能用于面板 3,如下所示:

<% content_for :panel3 do %>
    <!-- Your View -->
<% end %>

【讨论】:

  • 这适用于页面标题,您确实希望自定义大多数 Egbert 页面,但最终必须在每个页面中指定它。这使得它不适合仅在身份验证页面上隐藏侧边栏之类的东西。
【解决方案2】:

您可以将产量和内容用于:

 For example:
 <%= yield :head %>
<% content_for :head do %>
  <title>A simple page</title>
<% end %>

【讨论】:

    【解决方案3】:

    是的,您可以有多个&lt;%= yield %&gt; 标签。您可以在基本视图中为每个 yield 标签指定类似这样的名称。

    &lt;%= yield :head %&gt;

    &lt;%= yield :footer %&gt;

    然后在您的个人视图中使用content_for 标签。

    <% content_for :head do %>
      <%= stylesheet_link_tag 'custom' %>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 2012-04-04
      相关资源
      最近更新 更多