2008-12-04 15 views
39

Sono uno sviluppatore Grails piuttosto esperto, ma la maggior parte della mia esperienza è stata con l'utilizzo di grails per servire JSON/XML su un'app flex e su alcuni siti Web HTML relativamente semplici.Esistono buoni tutorial per l'uso del sitemesh in un'applicazione Grails?

Mi sono immerso in profondità nell'uso dell'integrazione del sitemesh nei graal e sto faticando un po 'a trovare le migliori pratiche per alcune configurazioni più complesse, e sono curioso di sapere se ci sono buoni tutorial o esempi là fuori. Il sito web original Sitemesh non è così utile in quanto i tag di cui parla non sono esposti direttamente in Grails.

Una ricerca su Google sta mostrando per lo più vecchi post della mailing list e alcune cose SiteMesh vaniglia che mi sta aiutando a spostare un po 'più lungo, ma è un sacco di tentativi ed errori.

Capisco perfettamente come funzionano g: layoutTitle, g: layoutHead e g: layoutBody. Quelli sono facili e ben documentati.

I tipi di cose che mi piacerebbe vedere esempi per:

  • g: applyLayout - the documentation on this è debole e io non comprendere appieno gli usi suggeriti nelle principali documenti. Qual è la differenza rispetto all'impostazione della proprietà meta name='layout' content='foo'?

  • g: pageProperty: alcuni esempi migliori su come estrarre e utilizzare le proprietà nel modello principale impostando i valori come meta tag nella pagina che viene decorata. Lo grails docs on pageProperty mostra solo l'attributo onload dal corpo che viene portato in avanti. Penso che tu possa usare anche i valori dei metatag qui, qualsiasi altra cosa?

  • È possibile utilizzare più livelli di layout Sitemesh? I miei test sembrano farmi pensare che non posso, ma questo sembra ridurre la riusabilità. Penso che la risposta qui sia un uso del g: applyLayout, ma quello è dove sto lottando di più.

risposta

14

Beh, posso rispondere un po ':

Il tuo primo e la terza questione sono correlati, come non si può layout catena usando il meta tag.

La pagina finale dovrebbe avere un meta tag come lei suggerisce, ma se si vuole sovrapporre un layout in cima ad un altro layout, è mettere una g: tag applyLayout nella parte superiore del layout bambino, indicando il genitore.

Nella tua edit.gsp, dovreste:

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

e in editTemplate.gsp, si avrebbe:

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

così edit.gsp userebbero editTemplate.gsp, che userebbe baseTemplate.gsp come layout di base. Puoi incatenarli a seconda delle necessità.

Non ho usato g: pageProperty affatto, quindi non posso lanciarvi esempi migliori lì, mi dispiace.

+4

Questo dovrebbe farti andare saggio esempio [Bontà Grails - Applicazione layout nei layout] (http://mrhaki.blogspot.com/2011/03/grails-goodness-applying-layouts-in.html?utm_source=feedburner&utm_medium= feed & utm_campaign = Feed% 3A + mrhaki +% 28Messages + from + mrhaki% 29) – npiv

27

g: pageProperty è una cosa molto potente, ma scarsamente documentata.Consente di dire in mio layout a specificare dove mettere alcuni contenuti in questo modo:

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

Ora nella mia pagina posso specificare alcuni contenuti:

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

SiteMesh prenderà il tag contenuti, indipendentemente dalla posizione attuale nel codice HTML della pagina e posizionarlo dove deve andare nel flusso del layout.

Ancora meglio, se all'interno della mia pagina rendo un modello che specifica anche un'area di contenuto con un tag di "intestazione", sovrascriverà la prima dichiarazione, e sarà il contenuto del modello che verrà reso nel finale disposizione.

+1

mio dio questa è la risposta esatta al mio problema, il punto qui è l'uso della 'pagina'. Nel nome della pagina. +1000 – fixitagain

+0

Non ho mai visto questo documentato da nessuna parte. Scelgo i grails poiché molti siti affermano che è ben documentato ... Non è la mia esperienza fino ad ora .. – sanya

4

Il Sitemesh insieme a Grails è una funzionalità molto potente. Più lo uso - più lo adoro. Puoi decorare qualsiasi parte del nostro sito Web: puoi disporre di layout per messaggi di errore, suggerimenti, righe di notizie, commenti, ecc. Ecc. Solo per notare che puoi farlo anche nelle tue pagine e avere più livelli di decorazione (no <contenuti> necessario):

/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

È lo stesso dei template con g: render. C'è qualche differenza? –

+0

Questa implementazione è molto più pulita se hai letteralmente centinaia di modelli. Non vuoi finire con centinaia di g: render e avere molte molte proprietà in "$ {quotes}". Questo è più facile da leggere e mantenere. Per il piccolo sito web non fa differenza. – igor

0

Vedi la nostra Rabbtor Showcase App per pochi ottimi esempi su

  • la creazione di layout nidificate
  • modelli di rendering
  • applicare i layout a parti specifiche di una pagina

. Questa app è in realtà una vetrina per il nostro strumento Rabbtor che consente di utilizzare GSP all'esterno di Grails, ma le parti relative a Sitmesh sono valide anche per Grails.