2008-12-04 10 views
39

Ich bin ein ziemlich erfahrener Grails-Entwickler, aber die meiste Erfahrung habe ich mit der Verwendung von Grails gemacht, um JSON/XML zu einer Flex-App und einigen relativ einfachen HTML-Webseiten zu bringen.Gibt es gute Tutorials für die Verwendung von Sitemesh in einer Grails-Anwendung?

Ich habe tiefer in die Verwendung der Sitemesh-Integration in Grails eingetaucht und ich habe ein wenig Mühe, Best Practices für komplexere Konfigurationen zu finden, und ich bin neugierig, ob es gute Tutorials oder Beispiele gibt. Die original Sitemesh Website ist nicht so nützlich, da die Tags, über die sie spricht, in Grails nicht direkt verfügbar sind.

Eine Google-Suche zeigt vor allem alte Mailinglisten-Einträge und einige Vanilla-SiteMesh-Sachen, die mir helfen, ein wenig weiter zu gehen, aber es ist eine Menge Versuch und Irrtum.

Ich verstehe vollständig, wie die grundlegenden Funktionen g: layoutTitle, g: layoutHead und g: layoutBody funktionieren. Diese sind einfach und gut dokumentiert.

Die Arten von Dingen, die ich für Beispiele sehen möchten:

  • g: applyLayout - the documentation on this schwach ist und ich nicht vollständig verstehen, die in den wichtigsten docs vorgeschlagene Verwendung. Wie unterscheidet sich das als meta name='layout' content='foo' Eigenschaft festlegen?

  • g: pageProperty - einige bessere Beispiele zum Ziehen und Verwenden von Eigenschaften in der Hauptvorlage, indem die Werte als Meta-Tags auf der Seite festgelegt werden, die dekoriert wird. Die grails docs on pageProperty zeigen nur das Onload-Attribut aus dem Körper vorgebracht werden. Ich denke, Sie können hier auch Meta-Tag-Werte verwenden, alles andere?

  • Können Sie mehrere Ebenen von Sitemesh-Layouts verwenden? Meine Tests scheinen mich zu glauben, dass ich das nicht kann, aber das scheint die Wiederverwendbarkeit zu verringern. Ich denke, dass die Antwort hier eine Verwendung des g: applyLayout ist, aber da kämpfe ich am meisten.

Antwort

14

Nun, ich kann ein bisschen beantworten:

Ihre erste und die dritte Frage in Zusammenhang steht, wie Sie nicht Kette Layouts des Meta-Tag verwenden können.

Ihre letzte Seite sollte ein Meta-Tag haben, wie Sie vorschlagen, aber wenn Sie ein Layout über ein anderes Layout schichten möchten, legen Sie ein g: applyLayout-Tag an der Spitze des untergeordneten Layouts und zeigt auf das übergeordnete Element.

In Ihrem edit.gsp, dann würden Sie haben:

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

und in editTemplate.gsp, dann würden Sie haben:

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

so würde edit.gsp editTemplate.gsp verwenden, Das würde baseTemplate.gsp als Basislayout verwenden. Sie können diese nach Bedarf verketten.

Ich habe g: pageProperty überhaupt nicht benutzt, deshalb kann ich Ihnen dort keine besseren Beispiele geben, tut mir leid.

+4

Dies sollte Sie Beispiel weise [Grails Goodness - Anwenden von Layouts in Layouts] (http://mrhaki.blogspot.com/2011/03/grails-goodness-applying-layouts-in-.html?utm_source=feedburner&utm_medium= feed & utm_campaign = Feed% 3A + mrhaki +% 28Nachrichten + von + mrhaki% 29) – npiv

27

Die g: pageProperty ist eine sehr mächtige, aber sehr schlecht dokumentierte Sache.Lets in meinem Layout sagen, dass ich angeben, wo einige Inhalte wie folgt zu setzen:

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

jetzt in meiner Seite, die ich einige Inhalte angeben:

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

Sitemesh den Inhalt Tag nehmen, unabhängig von der tatsächlichen Position im HTML der Seite und legen Sie es dort hin, wo es in den Fluss des Layouts gehen muss.

Noch besser, wenn ich innerhalb meiner Seite eine Vorlage rendere, die auch einen Inhaltsbereich mit einem Tag "header" angibt, wird die erste Deklaration überschrieben und es wird der Inhalt der Vorlage sein, der im Finale gerendert wird Layout.

+1

mein Gott das ist die genaue Antwort auf mein Problem, der Punkt hier ist die Verwendung von 'Seite'. In dem pageProperty-Namen. +1000 – fixitagain

+0

Ich habe noch nie irgendwo dokumentiert gesehen. Ich wähle Grails, da viele Seiten angeben, dass es gut dokumentiert ist ... Nicht meine bisherigen Erfahrungen. – sanya

4

Der Sitemesh zusammen mit Grails ist eine sehr, sehr mächtige Funktion. Je mehr ich es benutze - desto mehr liebe ich es. Sie können jeden Teil unserer Website dekorieren: Sie können ein Layout für Fehlermeldungen, QuickInfos, Nachrichtenzeilen, Kommentare usw. haben. Nur um festzustellen, dass Sie dies auch in Ihren Seiten tun können und mehrere Dekodierungsstufen haben (Nr <Inhalt> erforderlich):

/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

Es ist das gleiche wie Vorlagen mit g: render. Gibt es einen Unterschied? –

+0

Diese Implementierung ist viel sauberer, wenn Sie buchstäblich Hunderte von Vorlagen haben. Sie wollen nicht mit hunderten von g: rendern enden und viele viele Eigenschaften in "$ {quotes}" haben. Dies ist einfacher zu lesen und zu pflegen. Für kleine Websites macht das keinen Unterschied. – igor

0

sehen Sie unsere Rabbtor Showcase App für ein paar sehr gute Beispiele auf

  • nested Layouts
  • rendering Vorlagen
  • Anwendung Layouts auf bestimmte Teile einer Seite

erzeugen. Diese App ist eigentlich ein Schaufenster für unser Tool Rabbtor, das die Verwendung von GSP außerhalb von Grails ermöglicht, aber Teile, die mit Summesh zusammenhängen, gelten auch für Grails.

Verwandte Themen