簡體   English   中英

Rails 4 - 部分上的多個產量塊

[英]Rails 4 - Multiple yield blocks on a partial

是否可以使用多個yield塊進行部分處理? 我想用它在我的項目中實現引導模式框,有點像這樣:

<div class="modal fade" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog modal-lg" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <%= yield :header %>
            </div>

            <div class="modal-body">
                <%= yield :body %>
            </div>

            <div class="modal-footer">
                <%= yield :footer %>
            </div>
        </div>
    </div>
</div>

這或多或少是我想使用它的方式

<%= render partial: "shared/modal" do %>
    <% content_for :header do %>
        ...        
    <% end %> %>

    <% content_for :body do %>
        ...        
    <% end %> %>

    <% content_for :footer do %>
        ...        
    <% end %> %>
<% end %>

有沒有辦法做到這一點? 出於某種原因,這可能是一種不好的方法嗎?

通過多次反復試驗,我想我在 Rails 5 中解決了這個問題,但需要在我的部分中插入一個空白yield才能讓它工作:

_partial.html.erb

<div class="partial">
  <%= yield %> <!--Does not do anything-->
  <div class="header">
    <%= yield :header %>
  </div>
  <div class="text">
    <%= yield :text %>
  </div>
</div>

實現為:

full_layout.html.erb

<%= render "partial" do %>
  <% content_for :header do %>
    <h1>Header content</h1>
  <% end %>
  <% content_for :text do %>
    <p>Text content</p>
  <% end %>
<% end %>

我認為您的渲染部分有問題。 請注意,您在渲染部分塊中擁有所有 content_for 塊。

<%= content_for :thing do %>
   Some content
<% end %>
<%= render partial: "blah" %>

在你的部分中使用多個 yield 塊沒有問題。 唯一要做的就是確保確實需要很多。 例如 content_for 部分基本上是內容的占位符,可以根據應用程序的邏輯而變化。 因此,在一頁中使用多個產量完全沒問題。

您也可以只在沒有輸出的情況下運行 put an yield 這樣您也可以使用默認塊。

<div>
  <% yield %>
  <div class="mt-3">
    <div class="text-2xl tracking-wide font-bold text-gray-900">
      heading
      <%= yield :heading %>
    </div>
  </div>

  <div class="relative bg-white rounded-xl shadow-xl mb-8 min-h-28">
    <%= yield %>
  </div>
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM