【问题标题】:Are there any good tutorials for using sitemesh in a grails application?有没有关于在 grails 应用程序中使用 sitemesh 的好教程?
【发布时间】:2010-09-25 06:17:50
【问题描述】:

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

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

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

我完全理解基本的 g:layoutTitle、g:layoutHead 和 g:layoutBody 标签的工作原理。这些都很简单并且有据可查。

我希望看到的示例:

  • g:applyLayout - the documentation on this 很弱,我不完全理解主要文档中建议的用途。这与设置 meta name='layout' content='foo' 属性有何不同?

  • g:pageProperty - 一些更好的示例,介绍如何通过将值设置为正在装饰的页面中的元标记来将属性拉入和使用到主模板中。 grails docs on pageProperty 仅显示来自被提出的主体的 onload 属性。我想你也可以在这里使用元标记值,还有什么?

  • 您可以使用多级站点网格布局吗?我的测试似乎让我认为我做不到,但这似乎降低了可重用性。我认为这里的答案是 g:applyLayout 的一些用法,但这是我最挣扎的地方。

【问题讨论】:

    标签: templates grails groovy gsp sitemesh


    【解决方案1】:

    g:pageProperty 是一个非常强大的东西,但文档却很少。假设在我的布局中,我指定了将一些内容放在哪里:

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

    现在我可以在我的页面中指定一些内容:

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

    无论页面 HTML 中的实际位置如何,Sitemesh 都会获取内容标签,并将其放置在布局流程中需要进入的位置。

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

    【讨论】:

    • 天哪,这是我问题的确切答案,这里的重点是使用“页面”。在 pageProperty 名称中。 +1000
    • 我从来没有在任何地方看到过这种记录。我选择 grails 是因为很多网站都说它有据可查......到目前为止不是我的经验......
    【解决方案2】:

    好吧,我可以回答一下:

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

    你的最终页面应该有你建议的元标记,但是如果你想在另一个布局之上分层布局,你把 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,所​​以我不能给你提供更好的例子,抱歉。

    【讨论】:

    【解决方案3】:

    Sitemesh 与 Grails 一起是一个非常强大的功能。我用得越多——我就越喜欢它。您可以装饰我们网站的任何部分:您可以为错误消息、工具提示、新闻行、cmets 等设置布局。请注意,您甚至可以在您的页面中执行此操作,并且可以有多个级别的装饰(没有 需要):

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

    【讨论】:

    • 和带有 g:render 的模板一样。有什么区别吗?
    • 如果你有数百个模板,这个实现会干净得多。您不想以数百个 g:renders 结束,并且在“${quotes}”中有许多属性。这更容易阅读和维护。对于小型网站,它没有什么区别。
    【解决方案4】:

    请参阅我们的Rabbtor Showcase App,了解一些非常好的示例

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      相关资源
      最近更新 更多