40

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

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

Google 検索では、ほとんどが古いメーリング リストの投稿といくつかの標準的なサイトメッシュが表示され、少し先に進むのに役立ちますが、多くの試行錯誤が必要です。

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

例を見てみたいものは次のとおりです。

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

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

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

4

4 に答える 4

27

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

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

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

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

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

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

于 2009-05-28T15:06:17.370 に答える
14

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

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

あなたが提案するように、最終ページにはメタタグが必要ですが、レイアウトを別のレイアウトの上に重ねる場合は、子レイアウトの上部に ag: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 をまったく使用していないため、より良い例を提供することはできません。申し訳ありません。

于 2008-12-05T06:10:43.890 に答える
4

サイトメッシュと Grails を組み合わせることは、非常に強力な機能です。使えば使うほど、ますます気に入ってしまいます。Web サイトのどの部分でも装飾できます。エラー メッセージ、ツールチップ、ニュース ライン、コメントなどのレイアウトを作成できます。 <コンテンツ> が必要):

/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>
于 2011-02-28T17:44:43.493 に答える