是否可以部分使用多个yield
块?我想用它在我的项目中实现bootstrap模式框,有点像这样:
<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 %>
有办法做到这一点吗?出于某种原因,这可能是一种糟糕的方法吗?
答案 0 :(得分:6)
通过大量试验和错误,我认为我在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 %>
答案 1 :(得分:0)
在partial中使用多个yield块没有问题。唯一的办法就是确保实际需要很多。例如,content_for部分基本上是内容的占位符,可以根据应用程序的逻辑而变化。因此,在一个页面中使用多个产量是完全没问题的。
答案 2 :(得分:0)
我认为你的渲染部分存在问题。请注意,渲染部分块中包含所有content_for块。
<%= content_for :thing do %>
Some content
<% end %>
<%= render partial: "blah" %>
答案 3 :(得分:0)
您也可以在没有输出的情况下直接在那里运行 put 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>
...