• ruby on rails全局布局,局部视图,局部布局


    参考链接:http://guides.ruby-china.org/layouts_and_rendering.html#%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%E6%A0%87%E7%AD%BE%E5%B8%AE%E5%8A%A9%E6%96%B9%E6%B3%95

    讲rails布局就得先说说yield关键字。

    1. 在rails布局中,yield标明一个区域,渲染的视图会插入这里。最简单的情况是只有一个 yield,此时渲染的整个视图都会插入这个区域:
      <html>
        <head>
        </head>
        <body>
        <%= yield %>
        </body>
      </html>

      布局中也可以标明多个区域,这个就需要使用具名yield,然后使用content_for方法。对于未命名的yield,视图的主体就会插入到未命名的yield区域。

      #主布局  application.html.erb
      <html>
        <head>
        <%= yield :head %>
        </head>
        <body>
        <%= yield %>
        </body>
      </html>
      
      #子页面
      <% content_for :head do %> #插入到主布局的 <%= yield :head %>位置
        <title>A simple page</title>
      <% end %>
       
      <p>Hello, Rails!</p>#插入到主布局的  <%= yield %>位置
      
      
      #最后生成的html
      <html>
        <head>
        <title>A simple page</title>
        </head>
        <body>
        <p>Hello, Rails!</p>
        </body>
      </html>

      如果布局不同的区域需要不同的内容,例如侧边栏和底部,就可以使用 content_for 方法。content_for 方法还可用来在通用布局中引入特定页面使用的 JavaScript 文件或 CSS 文件。

      以上都是对于在application.html.erb的全局布局来说的。

    2. 具名局部视图
      在视图中渲染局部视图可以使用 render 方法:
      <%= render "menu" %>

      渲染这个视图时,会渲染名为 _menu.html.erb 的文件。注意文件名开头的下划线:局部视图的文件名开头有个下划线,用于和普通视图区分开,不过引用时无需加入下划线。即便从其他文件夹中引入局部视图,规则也是一样:

      <%= render "shared/menu" %>
      #这行代码会引入 app/views/shared/_menu.html.erb 这个局部视图。

      局部视图的一种用法是作为“子程序”(subroutine),把细节提取出来,以便更好地理解整个视图的作用。例如,有如下的视图:

      <%= render "shared/ad_banner" %>
       
      <h1>Products</h1>
       
      <p>Here are a few of our fine products:</p>
      ...
       
      <%= render "shared/footer" %>

      这里,局部视图 _ad_banner.html.erb 和 _footer.html.erb 可以包含程序多个页面共用的内容。在编写某个页面的视图时,无需关心这些局部视图中的详细内容。

    3. 局部布局
      和视图可以使用布局一样,局部视图也可使用自己的布局文件。例如,可以这样调用局部视图:
      <%= render partial: "link_area", layout: "graybar" %>

      这行代码会使用 _graybar.html.erb 布局渲染局部视图 _link_area.html.erb。注意,局部布局的名字也以下划线开头,和局部视图保存在同个文件夹中(不在 layouts 文件夹中)。

      还要注意,指定其他选项时,例如 :layout,必须明确地使用 :partial 选项。

      但是我在实际使用中,也是把局部布局保存在layouts文件夹中,使用的时候

      <%= render partial: "link_area", layout: "layouts/graybar" %>
      #为了保证不出错,可以这么写
      <%= render partial: "link_area.html.erb", layout: "layouts/graybar.html.erb" %>


      在使用render :partical时,可以向局部视图传递本地变量

      #传递本地变量
      <h1>New zone</h1>
      <%= render partial: "form", locals: {zone: @zone} %>
      
      #使用
      <%= form_for(zone) do |f| %>
        <p>
          <b>Zone name</b><br>
          <%= f.text_field :name %>
        </p>
        <p>
          <%= f.submit %>
        </p>
      <% end %>
      #还有些其他方式传递,见前面的参考链接
  • 相关阅读:
    eclipse- DDMS截图功能使用
    宏-新项目物理按键不能用
    宏-宏的添加跟代码中的使用
    SQlite-数据库的访问实例(转)
    git 工具的使用总结(6)-提交合并处理
    git 工具的使用总结(5)-查看历史记录
    git -处理分支合并
    Linux查询网址
    SQLite常用网址
    Java查询网址
  • 原文地址:https://www.cnblogs.com/jecyhw/p/5152939.html
Copyright © 2020-2023  润新知