【问题标题】:Rails: about yieldRails:关于产量
【发布时间】:2011-10-21 10:18:02
【问题描述】:

我在 Rails v2.3 应用中看到了一些代码。

layout/car_general.html.erb(这个视图被cars_controller中的一个方法调用),看到了代码:

<body>
    <%= yield %>

    <%= javascript_include_tag 'jquery-1.4.2.min' %>

    <% javascript_tag do %>
      <%= yield :jstemplates %>
          var some_car = new Object;
      <%= yield :some_car %>
    <% end -%>
</body>

要问的两个问题:

  1. 在哪里可以找到&lt;body&gt; 下第一个 的产量内容。
  2. 在视图中包含 js 代码是特定于 Rails 的方式吗? &lt;%= yield :jstemplates %&gt;&lt;%= yield :some_car %&gt; 呢,是指向视图还是仅仅显示 some_car 的值?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1


    【解决方案1】:

    没有任何参数,yield 将呈现当前控制器/动作的模板。因此,如果您在 cars/show 页面上,它将呈现 views/cars/show.html.erb

    当您传递 yield 一个参数时,它允许您在模板中定义要在该模板之外呈现的内容。例如,如果您的 cars/show 页面有一个特定的 html sn-p 您要在页脚中呈现,您可以将以下内容添加到您的显示模板和 car_general 布局中:

    show.html.erb:

    <% content_for :footer do %>
      This content will show up in the footer section
    <% end %>
    

    layouts/car_general.html.erb

    <%= yield :footer %>
    

    Rails 指南中有一个关于使用 yield 和 content_for 的好章节:http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield

    content_for 的 API 文档也很有帮助,还有一些其他示例可供参考。请注意,它适用于 Rails 3.1.1,但自 2.3 以来,此功能没有太大变化,如果有的话,仍应适用于 3.0.x 和 3.1.x。

    【讨论】:

      猜你喜欢
      • 2021-02-23
      • 2019-05-13
      • 2013-06-24
      • 2014-03-28
      • 2016-03-17
      • 2014-12-06
      • 1970-01-01
      • 2020-04-29
      • 2011-04-06
      相关资源
      最近更新 更多