首先,让我说我很熟悉content_for
。这不是我在这里寻找的东西。
我想允许一个模板和任意数量的部分来构建,比如说,我想要加载的 JavaScript 文件列表,并将它们传递给布局,以便它处理并添加到该<head>
区域。我只想在页面确实需要它们时加载文件,所以我宁愿不只是将它们全部放入布局中。它似乎也不像是由控制器处理的事情,因为这些主要是特定于视图的更改。
我试过用content_for
它来返回一个名称数组,但这似乎不起作用。它也不允许多个部分将自己的先决条件添加到列表中。我还尝试在模板/部分中使用辅助函数添加到列表中,然后在布局中使用该列表,但似乎布局代码是在模板代码之前评估的。
有任何想法吗?顺便说一下,这不是 JavaScript 特有的。我只需要一种将 Ruby 对象从模板/部分传递到布局的方法。
编辑:每个请求,一个例子。css_import
只是我写的一个模拟 CSS 的助手@import
。
# In the layout
<style type="text/css">
<%- yield(:foobar).each do |foo| -%>
<%= css_import foo %>
<%- end -%>
</style>
# In the template
<%- content_for :foobar do
['layout', 'recipes', 'user']
end -%>
# The actual output from View -> Source
<style type="text/css">
</style>