渲染、渲染部分和yield的区别

68

我已经从Rails指南上读过它,看过Micheal Hartel的书,现在正在阅读Rails View书籍,但仍然感到困惑 :(

有一个_footer.html.erb文件,所以它是一个“局部文件”,在代码中写着:

<%=render 'layouts/footer' %>

据我所理解,当它看到这段代码时,会将页脚文件的HTML插入到此处。好的…现在几页后它说:

<%= render partial: 'activitiy_items/recent' %>

那么为什么这次我们在这里使用了“partial”这个词,但是在以前的例子中没有呢?

还有其他地方我看到了<%= yield :sidebar %>

所以这个yield也会插入HTML在它的位置吗?那么这不是render正在做的吗?

我希望如果另一个程序员而不是书籍向我解释这个问题,也许我这次能理解它 :)

2个回答

134

render & render partial:

  • render 'some_view'render partial: 'some_view' 的简写。

  • render file: 'view' 会寻找文件 view.html.erb 而不是 _view.html.erb (.erb 或你使用的任何其他渲染器)。

  • render 可以为局部变量传递参数,如果您没有使用集合或布局,例如:

 render 'some/path/to/my/partial', custom_var: 'Hello'

yield & content_for

  • yield 通常用于布局。它告诉Rails将此块的内容放置在布局中的那个位置。
  • 当你执行 yield :something 关联到 content_for :something时,你可以传递一个代码块(视图)以显示在yield :something所放置的位置(请参见下面的示例)。

关于yield的一个小例子:

在你的布局中:

<html>
<head>
 <%= yield :html_head %>
</head>
<body>
 <div id="sidebar">
   <%= yield :sidebar %>
 </div>
</body>
在您的一个视图中:
<% content_for :sidebar do %>
  This content will show up in the sidebar section
<% end %>

<% content_for :html_head do %>
  <script type="text/javascript">
    console.log("Hello World!");
  </script>
<% end %>

这将生成以下的HTML:

<html>
<head>
  <script type="text/javascript">
    console.log("Hello World!");
  </script>
</head>
<body>
 <div id="sidebar">
   This content will show up in the sidebar section
 </div>
</body>

可能有帮助的文章:

文档和指南链接:


那么Render和Yield都是渲染HTML并插入它吗? - user1899082
1
yield :something 将在提供给 content_for :something 的代码块上调用 render。当调用 render 时,它将仅生成 HTML。 - MrYoshiji
1
yield是Ruby的关键字 - 它不仅适用于Rails。当我一年前从Java和PHP转来时,我很难理解它。 - Niels B.
1
应该将 render :partial 'some/path/to/my/partial' 改为 render partial: 'some/path/to/my/partial' - Eric H.
9
еңЁRails 4дёӯпјҢжӮЁеҸҜд»ҘеңЁдёҚдҪҝз”Ё:partialзҡ„жғ…еҶөдёӢдј йҖ’еҸҳйҮҸпҝҪпҝҪпҝҪжёІжҹ“еҮҪж•°гҖӮдҫӢеҰӮпјҡrender 'some/path/to/my/partial', custom_var: 'Hello'гҖӮиҜ·еҸӮи§ҒжӯӨеӨ„зҡ„вҖңRendering the default caseвҖқйғЁеҲҶпјҡhttp://api.rubyonrails.org/classes/ActionView/PartialRenderer.html - Patrick Cullen
显示剩余2条评论

4

关于render、render:partial和yield

  • render:template 和 render:partial是Rails中的两个文件。


    render :template 通常是根据动作创建的,语法为 demo.html.erb。

    render :partial 是可重用的,并且可以从不同的视图中调用,在应用程序中共享,并且语法为 _demo.html.erb。

  • yield 和 render。


Yield是一种调用一个带有其输出的代码块的方法,但render将包含一个部分页面模板,在调用它的地方。在Rails中,yield主要用于布局,而render用于操作或它们的模板。


1
这是关于 render :partial 语法的极度错误解释——render :partial 是一个扩展形式,可以像 MrYoshiji 上面所写的那样接受本地变量... 下划线“_”用于不是 actions 的 partials...所有 actions(在 controller 中定义)都没有前缀(“_”)——你可以使用 Rails 约定通过任何定义的单数/复数模型名称调用 render。 - John Doe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接