Ich versuche, eine von mir geschriebene HTML-Komponente, die das Panel-Styling bietet, wiederzuverwenden. Etwas wie:
<div class="v-panel">
<div class="v-panel-tr"></div>
<h3>Some Title</h3>
<div class="v-panel-c">
.. content goes here
</div>
<div class="v-panel-b"><div class="v-panel-br"></div><div class="v-panel-bl"></div></div>
</div>
Ich sehe also, dass das Rendern einen Block braucht. Ich dachte mir dann könnte ich so etwas machen:
# /shared/_panel.html.erb
<div class="v-panel">
<div class="v-panel-tr"></div>
<h3><%= title %></h3>
<div class="v-panel-c">
<%= yield %>
</div>
<div class="v-panel-b"><div class="v-panel-br"></div><div class="v-panel-bl"></div></div>
</div>
Und ich möchte so etwas tun wie:
#some html view
<%= render :partial => '/shared/panel', :locals =>{:title => "Some Title"} do %>
<p>Here is some content to be rendered inside the panel</p>
<% end %>
Leider funktioniert dies mit diesem Fehler nicht:
ActionView::TemplateError (/Users/bradrobertson/Repos/VeloUltralite/source/trunk/app/views/sessions/new.html.erb:1: , unexpected tRPAREN
old_output_buffer = output_buffer;;@output_buffer = ''; __in_erb_template=true ; @output_buffer.concat(( render :partial => '/shared/panel', :locals => {:title => "Welcome"} do ).to_s)
on line #1 of app/views/sessions/new.html.erb:
1: <%= render :partial => '/shared/panel', :locals => {:title => "Welcome"} do -%>
...
Also mag es das =
offensichtlich nicht mit einem Block, aber wenn ich es entferne, dann gibt es einfach nichts aus.
Weiß jemand, wie man das macht, was ich hier erreichen will? Ich möchte dieses Panel-HTML an vielen Stellen auf meiner Website wiederverwenden.
layout
Problemumgehung möglich ist, sieheguides.rubyonrails.org/…Antworten:
Während diese beiden obigen Antworten funktionieren (also das Beispiel, auf das Tony sowieso verweist), fand ich in diesem obigen Beitrag die prägnanteste Antwort (Kommentar von Kornelis Sietsma).
Ich denke,
render :layout
macht genau das , wonach ich gesucht habe:kombiniert mit:
quelle
<%= %>
anstelle von<% %>
zB<%= render :layout => '/shared/panel',
<%= render '/shared/panel', title: 'some title' do %>
Hier ist eine Alternative, die auf früheren Antworten basiert.
Erstellen Sie Ihren Teil auf
shared/_modal.html.erb
:Definieren Sie Ihre Methode auf
application_helper.rb
:Nennen Sie es aus jeder Sicht:
quelle
Sie können den Capture-Helfer und sogar Inline im Render-Aufruf verwenden:
und in shared / panel:
was produzieren wird:
Siehe http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html
quelle
Basierend auf der akzeptierten Antwort hat dies für mich mit Rails 4 gut funktioniert.
Wir können ein Panel als solches rendern:
Dies erfordert eine Hilfsmethode und eine gemeinsame Ansicht:
Hilfsmethode (ui_helper.rb)
Ansicht (/ui/panel.html.haml)
quelle
panel.html.haml
zu_panel.html.haml
Ich denke, es wird funktionieren (habe gerade einen schnellen Dirty-Test durchgeführt), wenn Sie es zuerst einer Variablen zuweisen und dann ausgeben.
quelle