zoukankan      html  css  js  c++  java
  • 【render】partial及其局部变量

    原文:http://www.cnblogs.com/lwm-1988/archive/2011/09/13/2175041.html

    1. partial

    1.1 把partial作为view的一部分来渲染,可以调用render方法:

    <%=render :partial=>"menu"%>
    
    #上面的代码会把文件名为_menu.html.erb的模板渲染到当前模板中。
    
    <%= render :partial => "shared/menu" %>
    
    #渲染app/views/shared/_menu.html.erb到当前模板。

    1.2 可以为partial单独指定layout:

    <%= render :partial => "link_area", :layout => "graybar" %>
    
    #partial的layout文件名必须以下划线开头:_graybar.html.erb,而且必须把layout模板文件和partial放在同一个目录下。

    2. 给partial传递局部变量


    2.1 :locals选项用于设置partial的局部变量:

    <%= render :partial => "form", :locals => { :button_label => "Create zone", :zone => @zone } %>
    
    #这样就可以在_form.html.erb中访问button_label和zone这两个变量。


    2.2 每个partial都有一个和partial名字相同(不带下划线)的局部变量,可以通过:object选项给这个变量传递值:

    <%= render :partial => "customer", :object => @new_customer %>

    这样就可以在_customer.html.erb中访问customer这个变量,它指向@new_customer。
    当然,作为父模板(parent)的一部分,partial可以直接访问父模板的实例变量,例如这里的@new_customer,但是如果这么做的话,partial就跟父模板耦合了,变得不容易重用了。所以建议使用partial的名字来引用实例变量而不是直接访问实例变量。
    之前版本的Rails中,如果不指定:object或者:locals选项,rails会自动在父模板中寻找与partial同名的那个实例变量作为partial的局部变量,如:

    <%= render :partial => "customer" %>

    如果在_customer.html.erb中访问customer这个变量,rails将会自动在父模板中寻找名为@customer的实例变量。这个特性在Rails2.2中已经不建议使用了(deprecated)。Rails3.0中已经将这个特性移除了。


    2.3 如果要传递给partial的实例变量名==partial名=model名,可以简写,如:

    #当@customer为Customer这个model的实例,并且partial名为customer时
    
    <%= render :partial => @customer %>
    
    #相当于
    
    <%= render :partial => "customer", :object=>@customer %>

    3. 渲染集合(Collections)


    3.1 :collection选项用于指定被传递给partial的集合对象

    假设有books这么个集合,包含了5个Book对象,可以这样使用:

    #main.html.erb
    
    <%= render :partial => "book", :collection => books %>
    
    #_book.html.erb
    
    <p><%= book.name%></p>

    这样,在main.html.erb中,_book.html.erb的内容会被渲染5次。这时候,partial模板中,与partial同名的那个变量指向了:collection选项传过来的集合中的每一项。如果你不想使用这个与partial同名的变量名,可以通过:as选项来设置你想要的变量名(:as的值只能用symbol,不能是string,否则在partial里会得到nil值):

    <%= render :partial => "product", :collection => @products, :as => :item %>

    3.2  下标索引值

    在设置:collection选项的时候,rails同时提供了一个counter变量给partial模板,变量名以partial名(不带下划线)开头,以_counter结尾,并且经试验,这个变量名不受:as选项影响(也就是说在上面的代码中,这个变量名应该是product_counter而不是item_counter)。其值为collection对象的索引值(从0开始)

    3.3 :spacer_template

    :spacer_template选项用于指定填充于collection每个member之间的模板:

    <%= render :partial => "product", :collection => @products, :spacer_template => "product_ruler" %>

    上面的代码中,_product_ruler.html.erb的内容将被填充到每一对_product partial之间。

    和:object一样,:collection也有简写形式: <%= render :partial => @products %>

  • 相关阅读:
    手机app打开的web,在打开chrome浏览器
    linux环境下安装yaf
    redis在ubuntu下的安装
    验证一个值是否在多维数组中
    20个正则表达式
    nginx+memcached缓存图片
    cocos2dx加载骨骼动画,获取骨骼位置
    listview的pushBackDefaultItem中的item属性被修改问题
    lua保留n位小数方法
    cocos2dx中node的pause函数(lua)
  • 原文地址:https://www.cnblogs.com/zs-note/p/4565111.html
Copyright © 2011-2022 走看看