2010-12-12 11 views
15

Mam stronę WWW, która używa Haml dla układów. Istnieje osobny plik layoutu (layout.haml), który jest używany podczas renderowania dowolnej rzeczywistej strony Haml. Layout.haml wyglądałStrukturyzacja szablonu układu w Haml

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

Problem: Jest to oczywiście już w dokumencie za <body> więc manipulowanie rzeczy w nagłówku nie jest bezpośrednio możliwe. Na przykład <title> został zmieniony przez @title. To, co jest większym problemem, to fakt, że każda strona JavaScript musi być załadowana do ciała. Ponadto layout.haml zawiera już Javascript, więc jQuery jest zazwyczaj tworzony wiele razy.

Jakieś sugestie dotyczące lepszej struktury szablonu?

+0

Dla jedynego haml aplikacji z podszablonów i układów, należy sprawdzić tę odpowiedź: https://stackoverflow.com/questions/6125265/using-layouts-in-haml-files-independent-of-rails –

Odpowiedz

43

to rozwiązanie jest dla Ruby on Rails tylko:

Można użyć yield(:location) i metod 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

Cześć dzięki, to wygląda całkiem elegancko, spróbuję to wkrótce – Philip

+15

Pamiętaj, że to jest Rails specyficzne rozwiązanie. –

6

używam 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

Dzięki, na pewno też to sprawdzę – Philip