Action View 渲染輔助工具
實作允許從檢視內容渲染的方法。若要使用這個模組,您只需要實作會傳回 ActionView::Renderer
物件的 view_renderer 即可。
- #
- R
執行個體公開方法
_layout_for(*args, &block) 連結
覆寫內容物件中的 _layout_for
,因此它支援將區塊傳遞給部分的案例。傳回給定名稱或區塊的佈局所產生的內容。
您可以將佈局視為一個以區塊呼叫的方法。如果使用者呼叫 yield :some_name
,區塊預設傳回 content_for(:some_name)
。如果使用者僅呼叫 yield
,預設區塊傳回 content_for(:layout)
。
使用者可以透過將區塊傳遞給佈局來覆寫這個預設
# The template
<%= render layout: "my_layout" do %>
Content
<% end %>
# The layout
<html>
<%= yield %>
</html>
在此案例中,這個方法傳回傳遞給 render :layout
的區塊,而不是會傳回 content_for(:layout)
的預設區塊,而回應將會是
<html>
Content
</html>
最後,區塊可以採用區塊引數,而這些引數可以透過 yield
傳遞
# The template
<%= render layout: "my_layout" do |customer| %>
Hello <%= customer.name %>
<% end %>
# The layout
<html>
<%= yield Struct.new(:name).new("David") %>
</html>
在此案例中,佈局會收到傳遞給 render :layout
的區塊,而指定的結構會作為引數傳遞給區塊。結果將會是
<html>
Hello David
</html>
來源:顯示 | 在 GitHub 上
# File actionview/lib/action_view/helpers/rendering_helper.rb, line 97 def _layout_for(*args, &block) name = args.first if block && !name.is_a?(Symbol) capture(*args, &block) else super end end
render(options = {}, locals = {}, &block) 連結
傳回由選項雜湊決定的渲染結果。主要選項是
-
:partial
- 請參閱ActionView::PartialRenderer
。 -
:file
- 呈現明確的範本檔案(這曾經是舊的預設值),加入:locals
以傳入這些。 -
:inline
- 呈現內嵌範本,類似於在控制器中執行的內容。 -
:plain
- 呈現傳出的文字。將內容類型設定為text/plain
。 -
:html
- 呈現傳出的 HTML 安全字串,否則先對字串執行 HTML 逸出。將內容類型設定為text/html
。 -
:body
- 呈現傳出的文字,並繼承text/plain
的內容類型,來自ActionDispatch::Response
物件。
如果未傳遞 options
hash 或指定 :update
,則
如果傳遞回應 render_in
的物件,則在物件上呼叫 render_in
,並傳入目前的檢視內容。
否則,使用第二個參數作為 locals hash 來呈現部分。
來源:顯示 | 在 GitHub 上
# File actionview/lib/action_view/helpers/rendering_helper.rb, line 30 def render(options = {}, locals = {}, &block) case options when Hash in_rendering_context(options) do |renderer| if block_given? view_renderer.render_partial(self, options.merge(partial: options[:layout]), &block) else view_renderer.render(self, options) end end else if options.respond_to?(:render_in) options.render_in(self, &block) else view_renderer.render_partial(self, partial: options, locals: locals, &block) end end end