Вопрос

Я пишу небольшое приложение на основе Синатры и хотел бы, чтобы каждое представление могло вставить различные элементы в макет, например, на страницу title или дополнительные ссылки на CSS/JavaScript в head.

В настоящее время мой макет (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>

И иметь возможность определить контент для этих блоков изнутри каждого представления.

Это возможно, и если да, то как я бы сделал это?

Это было полезно?

Решение

Недавно я столкнулся с этим вопросом в Railscamp, и, к счастью, Тим Лукас смог указать мне на то, что он развевал и работал под названием синатра-контент-для. Анкет Это охватит то, что вам нужно.

Другие советы

Я обнаружил, что это самое надежное решение для функциональности в стиле Rails 'content_for' в Синатре, особенно если вы используете шаблоны ERB, а не Haml:

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

Вы можете просто использовать @stylesheet в своем рубиновом файле

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top