2008-04-06
#007_关于layouts
关键字: layout
一般说来,layouts有5种:global layouts, controller layouts, shared layouts, dynamic layouts, action layouts.
假设有这样一个视图
1. global layouts
所有的controller都继承于application,因此application.rhtml会作为global layouts最先解析。
2. controller layouts
该layouts只作用于projects_controller
3. shared layouts
首先建立views/layouts/admin.rhtml,然后在controller中声明即可,可在多个controller中共享。
4. dynamic layouts
我们可以根据需要为不同的用户选择不同的layouts,比如区别admin和user。同样可以用于博客主题的替换。
5. action layouts
在action中指定layouts即可。
另外我们可以直接指定不使用任何layouts
这5种layouts的优先级为最里面的最高,也就是说action > dynamic > shared > controller > global.
假设有这样一个视图
<!-- views/projects/index.rhtml --> <h2>Projects</h2> <ul> <% for project in @projects %> <li><%= project.name %></li> <% end %> </ul>
1. global layouts
<!-- views/layouts/application.rhtml --> <h1>Global Layouts</h1> <%= yield %>
所有的controller都继承于application,因此application.rhtml会作为global layouts最先解析。
2. controller layouts
<!-- views/layouts/projects.rhtml --> <h1>Controller Layouts</h1> <%= yield %>
该layouts只作用于projects_controller
3. shared layouts
首先建立views/layouts/admin.rhtml,然后在controller中声明即可,可在多个controller中共享。
class ProjectsController < ApplicationController
layout "admin"
def index
@projects = Project.find(:all)
end
end
4. dynamic layouts
我们可以根据需要为不同的用户选择不同的layouts,比如区别admin和user。同样可以用于博客主题的替换。
class ProjectsController < ApplicationController
layout :user_layout
def index
@projects = Project.find(:all)
end
protected
def user_layout
if current_user.admin?
"admin"
else
"application"
end
end
end
5. action layouts
在action中指定layouts即可。
class ProjectsController < ApplicationController
def index
@projects = Project.find(:all)
render :layout => 'projects'
end
end
另外我们可以直接指定不使用任何layouts
class ProjectsController < ApplicationController
def index
@projects = Project.find(:all)
render :layout => false
end
end
这5种layouts的优先级为最里面的最高,也就是说action > dynamic > shared > controller > global.
- 14:13
- 浏览 (94)
- 评论 (0)
- 分类: Railscasts学习笔记
- 相关推荐
发表评论
- 浏览: 4742 次
- 性别:

- 来自: 南京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
render与redirect_to的区 ...
redirect_to会执行被渲染的那个action,而render不会,这跟你 ...
-- by alanyuqiang -
#008_layouts和content_fo ...
这是最普遍的用法,不知道楼主有没研究过,content_for,yield在不同 ...
-- by alanyuqiang -
#008_layouts和content_fo ...
...
-- by alanyuqiang -
render与redirect_to的区 ...
不错,最近正为这个发愁呢!
-- by evil850209 -
如何在update一条记录的部 ...
theone 写道wiisola 写道theone 写道update_all [ ...
-- by wiisola






评论排行榜