Som*_*jee 5 rubygems ruby-on-rails
我想知道 ruby 中是否有任何布局继承实现。在 symfony 中,你可以这样做:
layoutmain.html
Give <head> and all that here
<body>
<h3>{{title}}</h3>
{{block view}}
<div class="row">
<div class="span3">
{{content}}
</div>
</div>
{{end block}}
</body>
layout2.html
{{inherits layoutman}}
{{block view}}
<div class="container">
Structure it differently
</div>
{{end block}}
Run Code Online (Sandbox Code Playgroud)
可以这么说,它让您继承整个模板并覆盖不同布局的部分。所以脚本等保持在主模板中,但您可以更改视图结构。所以你可以在第一个布局中重用代码位
我在github上找到了一些液体继承项目,但看起来已经过时了
我使用以下方法来实现布局的“嵌套”,这是我发现最有用的布局继承形式。
在主应用程序帮助程序模块中,app/helpers/application_helper.rb我定义了一个帮助程序方法parent_layout:
module ApplicationHelper
def parent_layout(layout)
@view_flow.set(:layout, self.output_buffer)
self.output_buffer = render(:file => layout)
end
end
Run Code Online (Sandbox Code Playgroud)
该助手负责捕获当前布局的输出,然后渲染指定的父布局,并在父布局时插入子布局yield。
然后在我看来,我可以按如下方式设置布局继承。我从主应用程序布局开始,app/views/layouts/application.html.erb它是此配置中的子布局:
<div class="content">
<h1><%= content_for?(:title) ? yield(:title) : 'Untitled' %></h1>
<div class="inner">
<%= yield %>
</div>
</div>
<%= parent_layout 'layouts/container' %>
Run Code Online (Sandbox Code Playgroud)
对辅助方法的调用parent_layout指定它application.html.erb是 的子布局container.html.erb。然后我定义父布局app/views/layouts/container.html.erb如下:
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
</head>
<body>
<%= yield %>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
inyield产生container.html.erb“派生”(或子)布局application.html.erb,即它将渲染的输出插入application.html.erb到<body>of中container.html.erb。请注意,parent_layout调用需要在模板的末尾进行,因为它捕获布局的输出,直到调用它为止。
这是基于这篇文章的,但已更新以在 Rails 3.2 中工作(希望以后也可以)。我还没有在 Rails 4 中尝试过,但是您将能够获得类似的功能。
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |