2008-12-04 26 views
39

Jestem dość doświadczonym programistą Grails, ale większość mojego doświadczenia polegała na używaniu grails do serwowania JSON/XML do aplikacji Flex i niektórych względnie prostych stron HTML.Czy są jakieś dobre samouczki dotyczące korzystania z sitemesh w aplikacji grails?

Interesuję się głębiej w używaniu integracji z sitemesh w grails i próbuję znaleźć najlepsze praktyki w niektórych bardziej złożonych konfiguracjach i jestem ciekawy, czy istnieją dobre tutoriale lub przykłady. Strona internetowa original Sitemesh nie jest przydatna, ponieważ tagi, o których mówi, nie są bezpośrednio eksponowane w graalach.

Wyszukiwanie w wyszukiwarce Google w większości zawiera stare posty z list dyskusyjnych i niektóre artykuły z wanilii, które pomagają mi przejść dalej, ale jest to dużo prób i błędów.

W pełni rozumiem, jak działają podstawowe g: layoutTitle, g: layoutHead i g: layoutBody. Są łatwe i dobrze udokumentowane.

Te rodzaje rzeczy, które chciałbym zobaczyć przykłady dla:

  • G: applyLayout - the documentation on this jest słaby i nie w pełni zrozumieć zastosowania sugerowanych w głównych dokumentów. Czym to się różni od ustawiania właściwości meta name='layout' content='foo'?

  • g: pageProperty - kilka lepszych przykładów na to, jak wyciągnąć i użyć właściwości do głównego szablonu, ustawiając wartości jako metatagów na dekorowanej stronie. grails docs on pageProperty pokazuje tylko atrybut onload z przenoszonego ciała. Myślę, że możesz tutaj również użyć wartości metatagów, cokolwiek innego?

  • Czy możesz używać wielu poziomów układów sitemesh? Moje testy zdają się sprawiać, że myślę, że nie mogę, ale to zdaje się zmniejszać możliwość ponownego użycia. Myślę, że tutaj odpowiedź brzmi: użycie g: applyLayout, ale właśnie tam walczę najbardziej.

Odpowiedz

14

Cóż, mogę odpowiedzieć na trochę:

Twoje pytania pierwsze i trzecie są powiązane, ponieważ nie można układy łańcuchowe za pomocą znacznika meta.

Twoja ostatnia strona powinna mieć metatag, tak jak sugerujesz, ale jeśli chcesz złożyć układ na wierzchu innego układu, umieść tag g: applyLayout u góry układu podrzędnego, wskazując na element nadrzędny.

W swojej edit.gsp, trzeba:

<meta name="layout" content="editTemplate" /> 

aw editTemplate.gsp, trzeba:

<g:applyLayout name="baseTemplate" > 
<!-- the html for the editTemplate --> 
</g:applyLayout> 

więc edit.gsp używać editTemplate.gsp, który wykorzystałby baseTemplate.gsp jako podstawowy układ. Możesz połączyć je w razie potrzeby.

Nie użyłem g: pageProperty w ogóle, więc nie mogę podać ci lepszych przykładów, przepraszam.

+4

Powinno to dać ci mądry przykład [Grails Goodness - Stosowanie układów w układach] (http://mrhaki.blogspot.com/2011/03/grails-goodness-applying-layouts-in.html?utm_source=feedburner&utm_medium= feed & utm_campaign = Feed% 3A + mrhaki +% 28Messages + od + mrhaki% 29) – npiv

27

the g: pageProperty jest bardzo potężną, ale bardzo słabo udokumentowaną rzeczą.Powiedzmy w moim układzie określić, gdzie umieścić jakąś treść takiego:

<html> 
<body> 
<g:pageProperty name="page.header" /> 
</body> 

Teraz w mojej strony mogę podać pewne treści:

<content tag="header"> 
<!-- header --> 
</content> 

Sitemesh odbędzie tag treści, niezależnie od aktualnej pozycji w kodzie HTML strony i umieść go tam, gdzie musi przejść w przepływie układu.

Jeszcze lepiej, jeśli na mojej stronie renderuję szablon, który również określa obszar zawartości ze znacznikiem "header", nadpisze pierwszą deklarację i będzie to zawartość szablonu, która zostanie wyrenderowana w ostatecznej wersji układ.

+1

Mój Boże, to jest dokładna odpowiedź na mój problem, chodzi o to, że używasz "strony". W nazwie stronyProperty. +1000 – fixitagain

+0

Nigdy nie widziałem tej dokumentacji nigdzie. Wybieram grails, ponieważ wiele stron twierdzi, że jest dobrze udokumentowane ... Nie moje dotychczasowe doświadczenie. – sanya

4

Sitemesh razem z Grails to bardzo potężna funkcja. Im częściej go używam - tym bardziej go kocham. Możesz ozdobić dowolną część naszej strony internetowej: możesz mieć układ komunikatów o błędach, etykietki narzędzi, wiadomości, komentarze itp., Itp. Tylko, że możesz to zrobić na swoich stronach i mieć wiele poziomów dekoracji (nie < zawartość > potrzebne):

/view/layout/inline-error-message.gsp

<span class="errorMessageInSomeFancyBox"> 
    <span class="errorIcon"></span> 
    <g:layoutBody /> 
<span> 

/views/book/create.gsp

<%-- let's decorate our error message with some fancy box --%> 
<g:applyLayout name="inline-error-message">${some.error.message}</g:applyLayout> 
+1

Jest to to samo, co szablony z g: render. Czy jest jakaś różnica? –

+0

Ta implementacja jest znacznie czystsza, jeśli masz dosłownie setki szablonów. Nie chcesz skończyć setkami g: renders i mieć wiele właściwości w "$ {quotes}". Jest to łatwiejsze do odczytania i utrzymywania. Dla małych stron internetowych nie ma znaczenia. – igor

0

Zobacz naszą Rabbtor Showcase App dla nielicznych bardzo dobre przykłady na

  • tworzenia zagnieżdżonych layoutów
  • szablonów renderowania
  • stosowania układów poszczególnych części strony

. Ta aplikacja jest właściwie wizytówką naszego narzędzia Rabbtor, które umożliwia używanie GSP poza Graalem, ale części związane z Sitmesh są również ważne dla Grails.

Powiązane problemy