5

我想知道 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}}

可以这么说,它让您继承整个模板并覆盖不同布局的部分。所以脚本等保持在主模板中,但您可以更改视图结构。所以你可以在第一个布局中重用一些代码

我在github上找到了一些液体继承项目,但是看起来已经过时了

4

2 回答 2

3

我使用以下方法来实现布局的“嵌套”,这是我发现最有用的布局继承形式。

在主应用程序助手模块中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

这个助手负责捕获当前布局的输出,然后渲染指定的父布局,并在父布局时插入子布局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' %>

对辅助方法的调用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>

yieldincontainer.html.erb产生于“派生”(或子)布局,即将application.html.erb渲染的输出插入application.html.erb<body>of 中container.html.erb。请注意,parent_layout调用需要出现在模板的末尾,因为它会捕获布局的输出,直到调用它为止。

这是基于这篇文章的,但更新后可以在 Rails 3.2 中工作(希望以后能工作)。我没有在 Rails 4 中尝试过,但你可以得到类似的工作。

于 2013-08-13T16:09:07.520 回答
0

Ruby on Rails 视图有一个名为“partials”的特性。I partial 是一个生成一点 html 并且可以包含在其他视图中的视图。部分也可以接受自定义其行为的参数(局部变量)。部分可以包括其他部分。

这可能是一个开始学习的好地方:http: //guides.rubyonrails.org/layouts_and_rendering.html

我从来不需要像你描述的那样做某种布局继承的事情,但我可以想象用部分很容易做到这一点,并传递 ruby​​ 变量来说明在哪种情况下使用哪个部分。

于 2013-08-13T15:59:55.047 回答