2010-12-12 13 views
15

Ho una pagina Web che utilizza Haml per i layout. Esiste un file di layout separato (layout.haml) che viene utilizzato quando si esegue il rendering di qualsiasi pagina haml effettiva. Il layout.haml simile aStrutturazione del modello di layout in Haml

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

Il problema: Questo è naturalmente già in <body> le cose in modo che manipolano del documento nell'intestazione non è direttamente possibile. Ad esempio, <title> viene modificato tramite @title. Qual è qualcosa di più di un problema è il fatto che ogni Javascript specifico per pagina deve essere caricato nel corpo. Inoltre il layout.haml contiene già Javascript, quindi jQuery viene solitamente istanziato più volte.

Qualche suggerimento per una struttura del modello migliore?

+0

Per un solo HAML app, con parziali e layout, si dovrebbe verificare questa risposta: https://stackoverflow.com/questions/6125265/using-layouts-in-haml-files-independent-of-rails –

risposta

43

Questa soluzione è per Ruby on Rails solo:

È possibile utilizzare yield(:location) ei content_for(:location) metodi, 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

Ciao grazie, sembra abbastanza elegante, ci proverò presto – Philip

+15

Nota che questo è un Rails soluzione specifica –

6

Io uso parziali:

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

Grazie, lo verificherò presto anche – Philip

Problemi correlati