Question

J'écris une petite application basée sur Sinatra et je voudrais que chaque vue puisse insérer divers éléments dans la mise en page, par exemple la page title ou des références CSS / JavaScript supplémentaires dans le head.

Actuellement, ma mise en page (ERB) ressemble à ceci (simplifié):

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

Plutôt que d'avoir le titre et CSS / JS fait référence à coder, j'aimerais réaliser quelque chose dans ce sens:

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

Et être capable de définir le contenu de ces blocs à partir de chaque vue.

Est-ce possible, et si oui, comment pourrais-je le faire?

Était-ce utile?

La solution

J'ai eu lieu récemment à ce problème à Railscamp et heureusement, Tim Lucas a pu me diriger vers quelque chose qu'il a fourni et a travaillé sur appelé sinatra-contenu pour. Cela couvrira ce dont vous avez besoin.

Autres conseils

J'ai trouvé que c'était la solution la plus robuste pour la fonctionnalité «Content_for» de style Rails dans Sinatra, surtout si vous utilisez des modèles ERB plutôt que HAML:

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

Vous pouvez simplement utiliser @stylesheet dans votre fichier rubis

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top