2010-12-12 41 views
15

J'ai une page Web qui utilise Haml pour les mises en page. Il existe un fichier de disposition distinct (layout.haml) qui est utilisé lors du rendu de toute page haml réelle. Le layout.haml ressemble àStructuration du modèle de disposition dans Haml

-# layout.haml 
!!! XML 
!!! 
%html 
    %head 
    ... 
    %body 
    ... 
    #content= yield 

Le problème: Ceci est bien sûr déjà <body> si les choses dans la manipulation l'en-tête du document ne soit pas directement possible. Par exemple, <title> est modifié via @title. Ce qui pose problème, c'est que chaque page spécifique à Javascript doit être chargée dans le corps. De plus, layout.haml contient déjà Javascript, donc jQuery est généralement instancié plusieurs fois.

Des suggestions pour une meilleure structure de modèle?

+0

Pour une seule application HAML, avec mises en page et partials, vous devriez vérifier cette réponse: https://stackoverflow.com/questions/6125265/using-layouts-in-haml-files-independent-of-rails –

Répondre

43

Cette solution est pour Ruby on Rails seulement:

Vous pouvez utiliser yield(:location) et les méthodes content_for(:location), more information.

layout.haml

!!! 
%html 
    %head 
    %title= yield(:title) 
    = yield(:head) 
    %body 
    = yield 

view.haml

- content_for(:title, 'My title') 
- content_for(:head) do 
    = javascript_include_tag :foo 

%h1 My view! 
+0

Salut merci, cela semble assez élégant, je vais essayer bientôt – Philip

+15

Notez qu'il s'agit d'un Rails solution spécifique. –

6

J'utilise: partials

!!! 
%html 
    = partial('trst_sys/shared/html-head') 

    %body{:id => "srv",:'data-lang' => current_lang} 
    #main.wrap 
    %header#header 
     = partial('trst_sys/shared/header') 
    %nav#menu 
     = partial('trst_sys/shared/menu') 
    %section#content 
     %article#xhr_content 
     = yield 
     %article#xhr_msg.hidden 
    %section#sidebar 
     = partial('trst_sys/shared/sidebar') 
    %section#main_footer.wrap 
    %footer#footer.wrap 
    = partial('trst_sys/shared/footer') 
+0

Merci, je vais certainement vérifier bientôt aussi trop – Philip