40

我是一位经验丰富的 Grails 开发人员,但我的大部分经验是使用 grails 将 JSON/XML 提供给 flex 应用程序和一些相对简单的 HTML 网站。

我一直在深入研究在 grails 中使用 sitemesh 集成,我正在努力寻找一些更复杂配置的最佳实践,我很好奇是否有任何好的教程或示例。最初的Sitemesh网站并没有那么有用,因为它所谈论的标签并未直接暴露在 grails 中。

谷歌搜索主要显示旧的邮件列表帖子和一些香草站点网格的东西,这有助于我走得更远,但它需要大量的试验和错误。

我完全理解基本的 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 中的实际位置如何,并将其放置在布局流程中需要进入的位置。

更好的是,如果在我的页面中渲染一个模板,该模板还指定了一个带有“header”标签的内容区域,它将覆盖第一个声明,它将是模板的内容,将在最终布局中呈现。

于 2009-05-28T15:06:17.370 回答
14

好吧,我可以稍微回答一下:

您的第一个和第三个问题是相关的,因为您不能使用元标记链接布局。

你的最终页面应该有你建议的元标记,但是如果你想在另一个布局之上分层布局,你把 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

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>
于 2011-02-28T17:44:43.493 回答
0

请参阅我们的Rabbtor 展示应用程序,了解一些非常好的示例

  • 创建嵌套布局
  • 渲染模板
  • 将布局应用于页面的特定部分

. 这个应用程序实际上是我们工具 Rabbtor 的展示,它可以在 Grails 之外使用 GSP,但与 Sitmesh 相关的部分也适用于 Grails。

于 2016-06-15T14:24:57.997 回答