rails view层的具体细节(四)

转自:http://ihower.tw/rails3/actionview.html


局部样板Partials

局部样板可以将Template中重复的程式码抽出来,例如我们在Part1中示范过的新增和编辑的表单。Partial Template的命名惯例是底线开头,但是呼叫时不需加上底线,例如:

<%= render :partial => "common/nav" %>

这样便会使用app/views/common/_nav.html.erb这个样板。如果使用Partial的样板和Partial所在的目录相同,可以省略第一段的common路径。

Partial样板中是可以直接使用实例变数的(也就是@开头的变数)。不过好的实务作法是透过:locals明确传递区域变数,这样程式会比较清楚,Partial样板也比较容易被重复使用:

<%= render :partial => "common/nav", :locals => { :a => 1, :b => 2 } %>

这样在partial样板中,就可以存取到区域变数ab

如果是阵列的资料,一般直觉会这样写:

@items.each do |item|
  render :partial => "item", :locals => { :item => item }
end

但是,partial可以支援处理阵列形式:

render :partial => "item", :collection => @items, :as => :item

这样的好处不只是少打字而已,还有效能上的好处,Rails会针对这种形式做最佳化。

集合型Collection

像是trli这类会一直重复的Template元素,我们可以使用collection参数来处理,Rails有针对集合型的Partial做效率最佳化,例如像以下的程式:

<ul> <% @people.each do |person| %>
        <%= render :partial => "person", :locals => { :person => person } %>
    <% end %>
<ul>

可以改使用Collection方式,

<ul>
    <%= render :partial => "person", :collection => @people %>
<ul>

如此既可以少掉两行each程式码,执行的效能又更好。

你可能感兴趣的:(rails view层的具体细节(四))