ruby on rails全局布局,局部视图,局部布局
2016-01-23 10:50
489 查看
参考链接: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关键字。
在rails布局中,yield标明一个区域,渲染的视图会插入这里。最简单的情况是只有一个 yield,此时渲染的整个视图都会插入这个区域:
布局中也可以标明多个区域,这个就需要使用具名yield,然后使用content_for方法。对于未命名的yield,视图的主体就会插入到未命名的yield区域。
如果布局不同的区域需要不同的内容,例如侧边栏和底部,就可以使用
以上都是对于在application.html.erb的全局布局来说的。
具名局部视图
在视图中渲染局部视图可以使用
渲染这个视图时,会渲染名为
局部视图的一种用法是作为“子程序”(subroutine),把细节提取出来,以便更好地理解整个视图的作用。例如,有如下的视图:
这里,局部视图
局部布局
和视图可以使用布局一样,局部视图也可使用自己的布局文件。例如,可以这样调用局部视图:
这行代码会使用
还要注意,指定其他选项时,例如
但是我在实际使用中,也是把局部布局保存在layouts文件夹中,使用的时候
在使用render :partical时,可以向局部视图传递本地变量
讲rails布局就得先说说yield关键字。
在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的全局布局来说的。
具名局部视图
在视图中渲染局部视图可以使用
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可以包含程序多个页面共用的内容。在编写某个页面的视图时,无需关心这些局部视图中的详细内容。
局部布局
和视图可以使用布局一样,局部视图也可使用自己的布局文件。例如,可以这样调用局部视图:
<%= 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 %> #还有些其他方式传递,见前面的参考链接
相关文章推荐
- Ruby on Rails入门篇
- ruby-程序员最好的朋友
- Ruby vs Python
- 2015 年 Ruby 大盘点
- 2015 年 Ruby 大盘点
- 《Learn Ruby the Hard Way》
- MAC安装Ruby环境
- ruby 操作 Win32ole (windows自动化接口)
- swig基本入门
- Sass-Ruby及Sass、Compass在Windows下安装
- Deepin 安装RVM ,ruby, rails
- Making Fabric Play Nice with RubyMotion
- ruby安装mysql2模块
- ruby访问mysql
- 180行ruby代码搞定游戏2048
- ruby函数回调的实现方法
- ruby函数回调的实现方法
- CocoaPods安装使用
- ruby each do 用法
- 如何在Mac OS X上安装 Ruby运行环境