web-dev-qa-db-ja.com

grailsアプリケーションでsitemeshを使用するための優れたチュートリアルはありますか?

私はかなり経験豊富なGrails開発者ですが、私の経験のほとんどは、JSON/XMLをflexアプリやいくつかの比較的単純なHTMLWebサイトに提供するためにGrailsを使用した経験です。

Grailsでのsitemesh統合の使用について深く掘り下げており、より複雑な構成のベストプラクティスを見つけるのに少し苦労しています。そこに、優れたチュートリアルや例があるかどうか知りたいです。 元のSitemesh Webサイトは、それが説明するタグがGrailsで直接公開されていないため、それほど有用ではありません。

グーグル検索は主に古いメーリングリストの投稿といくつかのバニラサイトメッシュのものを表示していて、私がもう少し先に進むのを助けていますが、それは多くの試行錯誤です。

基本的なg:layoutTitle、g:layoutHead、およびg:layoutBodyタグがどのように機能するかを完全に理解しています。それらは簡単で、十分に文書化されています。

私が例を見たいと思う種類のもの:

  • g:applyLayout -- これに関するドキュメント は弱く、メインのドキュメントで提案されている使用法を完全には理解していません。これは、meta name='layout' content='foo'プロパティの設定とどのように異なりますか?

  • g:pageProperty-装飾されているページのメタタグとして値を設定することにより、プロパティをメインテンプレートにプルして使用する方法に関するいくつかのより良い例。 pagePropertyのgrails docs は、転送される本体からのonload属性のみを表示します。ここでもメタタグ値を使用できると思いますが、他に何かありますか?

  • 複数レベルのサイトメッシュレイアウトを使用できますか?私のテストでは、私にはできないと思わせるようですが、それでは再利用性が低下するようです。ここでの答えはg:applyLayoutの使用法だと思いますが、それが私が最も苦労しているところです。

40
Ted Naleid

まあ、私は少し答えることができます:

メタタグを使用してレイアウトをチェーンすることはできないため、最初と3番目の質問は関連しています。

最終ページには、提案したとおりにメタタグが必要ですが、別のレイアウトの上にレイアウトを重ねる場合は、親を指すように、子レイアウトの上部にg:applyLayoutタグを配置します。

Edit.gspには、次のものがあります。

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

そしてeditTemplate.gspには、次のものがあります。

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

したがって、edit.gspはeditTemplate.gspを使用し、これはbaseTemplate.gspを基本レイアウトとして使用します。必要に応じてそれらをチェーンできます。

私はg:pagePropertyをまったく使用していないので、申し訳ありませんが、そこにもっと良い例を投げることはできません。

14
billjamesdev

g:pagePropertyは非常に強力ですが、文書化が非常に不十分です。私のレイアウトで、次のようなコンテンツを配置する場所を指定するとします。

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

これで、私のページでいくつかのコンテンツを指定できます。

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

Sitemeshは、ページのHTML内の実際の位置に関係なく、contentタグを取得し、レイアウトのフロー内で必要な場所に配置します。

さらに良いことに、私のページ内で「ヘッダー」のタグが付いたコンテンツ領域も指定するテンプレートをレンダリングすると、最初の宣言が上書きされ、最終的なレイアウトでレンダリングされるのはテンプレートのコンテンツになります。

27
Daniel Roberts

SitemeshとGrailsは、非常に強力な機能です。使えば使うほど、大好きになります。あなたは私たちのウェブサイトのどんな部分でも飾ることができます:あなたはエラーメッセージ、ツールチップ、ニュースライン、コメントなどのレイアウトを持つことができます。 <コンテンツ>が必要):

/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>
4
igor

のいくつかの非常に良い例については、 Rabbtor Showcase App を参照してください。

  • ネストされたレイアウトの作成
  • レンダリングテンプレート
  • ページの特定の部分にレイアウトを適用する

。このアプリは実際には、Grailsの外部でGSPを使用できるようにするツールRabbtorのショーケースですが、Sitmeshに関連するパーツはGrailsでも有効です。

0
Cagatay Kalan