Frage

Ich schreibe eine kleine sinatra-basierte App und möchte, dass jede Ansicht verschiedene Elemente in das Layout einfügen kann, z. B. die Seite title oder zusätzliche CSS/JavaScript -Referenzen in der head.

Derzeit sieht mein Layout (ERB) so aus (vereinfacht):

<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>

Anstatt den Titel und CSS/JS -Referenzen fest codiert zu haben, möchte ich etwas in dieser Richtung erreichen:

<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>

Und in der Lage sein, den Inhalt für diese Blöcke aus jeder Ansicht zu definieren.

Ist das möglich, und wenn ja, wie würde ich es tun?

War es hilfreich?

Lösung

Ich habe mich kürzlich bei Railscamp gegen dieses Problem gestoßen und zum Glück konnte Tim Lucas auf etwas hinweisen, das er gegabelt und an Calling gearbeitet hat SINATRA-CONTENT-FÜR. Dies wird das abdecken, was Sie brauchen.

Andere Tipps

Ich habe festgestellt, dass dies die robusteste Lösung für die Funktionalität im Rails-Stil in Sinatra ist, insbesondere wenn Sie ERB-Vorlagen anstelle von Haml verwenden:

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

Sie können einfach @Stylesheet in Ihrer Ruby -Datei verwenden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top