对rails布局、渲染、局部、模板和视图的另一种解释



编程新手,但我已经完成了一些整洁的东西。但考虑到我的非传统方法,我有时会对涉及许多假设的"传统"教义感到沮丧和困惑。

所以我一直在学习rails,喜欢它的结构,但是一些术语让我困惑,我试着去理解它,但不能把我的头绕在它周围。很多人一直让我参考RailsGuides的布局和渲染,但我不完全理解它,并认为它缺乏整体rails结构的更广泛的背景。

那么,你知道任何描述整体过程和术语的rails解释网站/文档/视频/书籍吗?更具体地说,那些解决布局、渲染、局部和视图如何工作的网站/文档/视频/书籍?

细节:

当试图理解它们之间的关系时,术语会变得混乱。以PJAX RailsCast为例,Bates明确地指出了布局和模板之间的区别。当我试图通过这个SO问题来实现这一点时,我迷失在文件的传统结构和命名及其功能中(不是每个人,只是那些似乎在命名中过载的文件)。

views/layouts中的applicaiton.html.erb文件为例。它的文件路径位置告诉我它是一个"布局",但是_navigation.html.erb_left.html.erb_right.html.erb等如何....它们也位于views/layouts中,因为所有页面都共享这些,它们与application.html.erb处于同一级别,但是这些在文件名中有前面的_下划线,因此Rails知道这些是"部分",但它们也位于views文件夹和layout文件夹中。那它叫什么名字呢?

上面的问题导致我不理解别人在说什么,因为我也可能没有相应地构建文件。范围问题(其中,据我所知,当你调用render 'action'render 'file'等…例如,rails可以找到另一个控制器(视图和动作)使用render vs content_for/yield。看看我的SO问题,在Geoff的回答中,在他的评论中,当我问,"所以不可能使用其他视图的yield ?",他的回答是"这当然不是意图"。

所以回到最初的问题,我觉得这些都没有被解释为它们彼此相关。我对制作一个健壮的应用程序感兴趣,并且我理解如何使用其他较小的框架来完成它,但我需要在更高的层次上理解rails如何使用布局,部分,模板和视图处理视图(MVC, V),以及文件应该如何相应地结构化。

我还想要一个描述它们的术语的图表或解释,以及它们与其他的关系(用法,另一个的父母/孩子)和传统的位置。这看起来像:

A view is what is presented to the user.   It is comprised of several parts.
  The following are required [ templates, layouts ].  
  These are not required, but very likely once you have a robust and
   flexible program [ partials, yields/content_for ].   
A layout is a framework ....
A Partial is content, but only "partial" of a page....
A rendered file is ... and is located in each model's view

Ok…这是我对事物的看法(呵呵呵呵)……请注意,有时当我说"X是Y"时,我真正的意思是"与Rails喜欢做的事情保持一致"。你可以违反它,但大多数人不会。此外,这些都不涉及在控制器中调用"render"时的工作方式。那完全是另一回事了。

  • app/views中的所有内容都是一个"视图"。"视图"是最终将被编译/渲染并显示给客户端(浏览器,第三方api等)的东西。

  • 任何以下划线开头的文件都是局部文件。它在app/views中的位置并不重要…

  • 任何[其他]文件都是诚实的观点。它可能是HTML、XML、JSON、PDF……

  • app/views/layouts中任何不以下划线开头的文件也是一个视图,但是是一个特殊的视图。这是一个布局。我的意思是,布局只是您希望应用于所有视图的通用标记的"包装器"。你可以把它们想象成一个"模板"如果你使用它的意思是"我在网上为我的网站买了一些高级网页模板"。然而,"模板"在Rails中还有另一个含义。所以…尽量不要将这些布局文件视为模板。可以把它们想象成"布局"。

  • 这些布局文件的独特之处在于它们在某个地方包含对<%= yield %>的调用。就像在Ruby中,它将控制权交给其他东西,并被结果所取代。在Rails中,这意味着无论调用了什么控制器/操作,这一行都将被实际视图的结果所取代(稍后会详细介绍)。

  • 在布局目录中放置部分是完全可以的。我一直都这么做。我这样做有两个原因。第一种是,如果我想简单地使用application.html. erbb。一个很好的例子,我通常有一个app/layouts/_google_analytics.html。erb文件,包含设置Google Analytics的JS/逻辑。这样我就可以在application.html.erb中调用render :partial => 'layouts/google_analytics',这很清楚发生了什么,但不那么混乱。这样做的另一个原因是如果我有多个布局。也许我有一个mobile.html.erb,但我仍然需要Google Analytics。现在我可以将"公共布局代码"轻松地包含到每个代码中。干。

  • 至于其他文件去哪里…把它们放在有意义的地方……这通常是相当明显的,当你构建更多的应用程序时,你会对它有一个感觉。您可以采用一些命名约定来更多地使用Rails的魔力,但您不必这样做。例如. .你可以调用render @widgets,它会寻找_widget.html.erb的部分,并为@widgets中的每个元素渲染一次。但你不必这样做。

  • 共享分音?他们可以去任何地方。这取决于你喜欢如何组织。很多人会创建app/views/shared并把它们放在那里。有些人会把它们放在他们的"主要"焦点上。这是……假设您有一个到处使用的_recent_blog_posts部分。你可以把它放在app/views/shared/_recent_blog_posts.html. erbb中。你也可以认为它应该放在app/views/blog/_recent_posts.html中。Erb(注意文件名的细微变化)。哪个是对的?很难说。

  • yield和content_for。默认情况下,Rails在将视图标记插入到布局中时默认执行此操作。您可以假设Rails在处理视图时自动执行content_for :default(或类似的操作),这就是yield在布局中拾取它的方式。但你也可以显式地做。假设你有一个网站的部分(假设在右边),你可能想要根据用户在你网站上的位置进行调整。在你的布局文件中,你可以这样做:

    …一些一般的右边的东西…

然后,在你的视图文件中你可以这样做:

... my main view content...
<% content_for :right_side do %>
  ... specific right side content stuff...
<% end %>

当这一切结合在一起时,Rails将把特定的右侧内容放到布局的右侧。

无论如何……

相关内容

  • 没有找到相关文章

最新更新