5

我正在编写一个基于 Sinatra 的小型应用程序,并希望每个视图都能够将各种项目插入到布局中,例如页面titlehead.

目前我的布局(erb)看起来像这样(简化):

<html>
<head>
    <title>Hard Coded Title Here</title>
    <link rel="stylesheet" ... />
</head>
<body>
    <h1>Hard Coded Title Here</h1>
    <div id="content">
        <%= yield %>
    </div>
</body>
</html>

我不想将标题和 CSS/JS 引用硬编码,而是想实现以下方面的目标:

<html>
<head>
    <title><%= yield :title %></title>
    <link rel="stylesheet" ... />
    <%= yield :more_head_refs %>
</head>
<body>
    <h1><%= yield :title %></h1>
    <div id="content">
        <%= yield %>
    </div>
</body>
</html>

并且能够从每个视图中定义这些块的内容。

这可能吗,如果可以,我将如何去做?

4

3 回答 3

4

我最近在 Railscamp 遇到了这个问题,幸运的是,蒂姆·卢卡斯(Tim Lucas)能够向我指出他分叉和工作的一个叫做sinatra-content-for 的东西。这将涵盖您需要的内容。

于 2009-12-05T10:22:25.720 回答
3

我发现这是 Sinatra 中 Rails 风格的“content_for”功能最强大的解决方案,特别是如果您使用的是 ERB 模板而不是 Haml:

http://github.com/kematzy/sinatra-outputbuffer

于 2010-09-20T18:53:08.950 回答
0

您可以在 ruby​​ 文件中使用 @stylesheet

于 2011-12-02T23:55:43.933 回答