Rails中的模板,部分和布局?

chr*_*ina 8 ruby-on-rails ruby-on-rails-3

回顾一些入门课程,我看到这些术语是单独使用的,但我认为我只理解布局.据我所知,布局是代码的临时部分(例如右侧导航部分,包含广告的div或类似的东西),部分是部分模板,但什么是模板,它是如何与布局?

如果可能的话,你能否给出彼此关系的所有三个定义?(即模板是....有两种,局部和布局......布局是特定类型的模板或任何答案)

如果需要,请纠正我的假设......

在使用pjax的Railscasts 294中,布局由随机数生成器明确区分,这就是我迷路的原因.

我试图通过App/Verb/noun访问单个页面,我可以"捕获"或"显示""照片","视频","图像"等...(应用程序/捕获/照片或应用程序/捕获/视频或应用程序/显示/照片等)我试图根据我"捕获"不同的东西进行一次div更改....我在错误的时候迷失了,或者我真的很接近但是我真的不明白我在做什么.

aen*_*enw 19

我知道这是一个老问题,但我也想知道.在指南中,没有明确解释布局和视图之间的区别,也没有对关系的明确解释.为了增加混淆,术语"模板"通常用于两者.作为90年代编写Smalltalk的人(但是Rails的新手),我深深理解MVC并理解它实现的一些方法 - 所以我的困惑不是那个部分.关于视图,布局和模板以及它们彼此之间的关系,只有一个缺失的背景.

这是我如何理解它:

简单的理解和示例开始,以便清楚地了解每个部分的关系和作用:

  • 一个视图是为特定的控制器到的动作(这使之成为一个特定的状态)响应"将被显示的东西".一个观点是在特定状态模型的快照,对于特定的动作(原因/上下文).这是关于信息和状态,不一定是"看起来很好".
  • 一个布局对具体信息如何的东西将被显示.它可能有标记(CSS,HTML等)提供有关如何组织某些事情的说明(这部分在这里,那部分在那里,那些在底部,这些浮在顶部;这是导航信息,这是H1,这是H3,这是一个定义..)以及它的外观(左,右,上,下,红,绿,强调,闪烁,隐藏,大,小,Helvetica等)想想" L ayout和大号 ooking好"

假设你有一个契约模型和控制器,并且你有一个定义视图的文件view/contracts/show.htm.erb:

   <% content_for :full_identification do %>
      <p><%= contract.display_name %>  <%=contract.full_id_number %> </p>
   <% end %>

   <% content_for :summary do %>
      <p> This is the summary for <%= contract.simple_name %>. You hire us. We give you coolness. You pay us.</p>
    <% end %>

  <% content_for :client_info do %>
    <div class="client-info">
      <p><span class="contract-title">Client: <%= contract.client_name%></span></p>
      <p>Address: <%= contract.client_address%></p>
      <p>Phone: <%= contract.client_phone %> </p>
         ... more info about the client.... 
    </div>
  <% end %>

  <% content_for :scope_of_work_statement do %>
    <p class="scope-of-work-statement"><%= contract.scope_of_work%>:</p>
  <% end %>
Run Code Online (Sandbox Code Playgroud)

您的布局文件将包含有关HTML的更多详细信息(假设HTML输出)以及有关您希望事物的外观的详细信息.也许您有一个控制器和视图,该视图特定于客户看到该合同的内容(以及如何).您有一个特定控制器的布局文件,它看起来像这样: layouts/contracts/contracts_clients_view.htm.erb

 <div class="tab-pane fade in"  >
    <div class="span7 highlight >
      <%= yield :full_identification %>
      <div class="no-breaks reflow" >
        <%= yield :summary%>
      </div>
    </div>

    <div class="span5 scope-of-work-statement">
        <h3>Scope of Work Statement</h3>
        <%= yield :scope_of_work_statement %>
        </div>
    </div>
 </div>
Run Code Online (Sandbox Code Playgroud)

*[这是一个完全人为的例子,因此我可以清楚地看到视图布局之间的关系.显然,在现实世界中,事物将被建模和表达.]*

视图提供了输入(内容片段)的布局.视图用于控制器操作,并相应地命名.(例如:显示,编辑,索引等)

布局以用于渲染它们的控制器命名.(例如:应用程序 - 用于ApplicationController,合同 - 用于ContractController,contract_customers_view - 用于ContractCustomersViewController)

它开始变得混乱的地方是一个视图 也可以在其中包含布局信息.有时只有视图文件(没有布局文件).并且任何一个都可以用模板语言(如ERb或HAML)编写,因此它们都可以称为模板.

一个部分是真的正是它说:这只是可以使用(并希望重新使用)一块.你可以把一部分的视图或布局和重新的因素,这样您就可以重新使用它-现在它的一个部分.部分的常见用途包括头部,导航部分(包括页眉,页脚等),可以重新考虑可重用性的地方,以及通过将它们用于语义和逻辑部分来改进编码风格和可读性.(这就是人们将它们比作子程序的原因.)

另一个你可以获得关于视图和布局以及它们如何不同的上下文的地方是ActionView经历实际产生输出的步骤(流程) - 使用所有这些部分渲染一些东西.例如,了解何时创建(或不创建)布局非常重要,这样您就可以了解在特定时间您可以使用哪些变量和参数. (我正在使用Rails 4,顺便说一下.)

鉴于所有这些,现在想象您的所有布局信息都在您的视图中,并且您的视图是以模板语言(ERb,HAML等)编写的,并且您已经使用了部分内容来使所有内容更好地演唱.对于您的应用程序而言,您可能没有任何布局文件yield,其中包含真实内容(由控制器和模型生成).

希望这有助于其他人掌握视图和布局.(我想我应该建议在指南中加入这样的东西.)


Pra*_*thy 2

来自http://www.tutorialspoint.com/ruby-on-rails/rails-layouts.htm:布局定义 HTML 页面的周围环境。它是定义最终输出的常见外观和感觉的地方。布局文件位于 app/views/layouts 中。

模板是视图文件的总称。视图模板 - 驻留在 app/views/ 文件夹中 - 将在布局中呈现。

了解 Rails 视图如何工作的最佳资源是有关布局和渲染的 Ruby on Rails 指南页面:http://guides.rubyonrails.org/layouts_and_rendering.html