在Grails GSP布局中使用其他布局

时间:2016-03-07 17:46:02

标签: grails layout gsp reusability

我有一个Grails 2.4.x应用程序,其中~80%的页面使用simple.gsp布局,其他页面都是不使用任何布局/模板的漫游者。但他们无法使用simple.gsp,因为其内容并不适用于他们。

我需要为所有这些页面添加标题导航(100%),并希望获得一个优雅的解决方案。理想情况下,我可以创建一个新的布局,例如awesome-header.gsp,其中包含标题导航。然后:

  • 对于使用simple.gsp布局的任何页面(同样,约20%),我只是让他们直接使用awesome-header.gsp;但是......
  • 我只是以某种方式引用/导入/扩展simple.gsp以某种方式使用awesome-header.gsp;现在允许其他~80%的页面使用新的标题导航

我们假装这是simple.gsp

<!DOCTYPE html>
<html>
    <head>
        <title>
            <g:layoutTitle default="Some App" />
        </title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <!-- Lots of stuff -->
        <g:layoutHead />
        <!-- Lots of stuff -->
    </head>
    <body>
        <!-- Lots of stuff -->
        <div id="page-content">
            <g:layoutBody />
        </div>
        <!-- Lots of stuff -->
    </body>
</html>

让我们假装这是awesome-header.gsp

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
    <head>
        <title></title>
    </head>

    <body>
        <script id="awesome-header-bootstrap" src="/awesome-header/awesome-header-bootstrap-1.0.js"><script>
        <g:layoutBody />
    </body>
</html>

漂亮的准系统。我需要这个awesome-header.gsp布局要做的就是在<body>元素的顶部包含一个JS。出于这个问题的目的,这个JS脚本是&#34;魔术&#34;并为我神奇地提取标题导航。

  • 如何引用/导入/扩展simple.gsp以使用awesome-header.gsp
  • 我不希望awesome-header.gsp覆盖任何titleheader内容(在simple.gsp内或任何落后者页面中定义)

我是如何完成此设置的?

1 个答案:

答案 0 :(得分:1)

如果我完全理解,您需要 simple.gsp awesome-header.gsp 之间的层次结构。所以你可以看一下这个link来帮助你做到这一点。

另一种解决方案,可能更容易,因为没有很多修改要做,就是使用模板:

  • 将所有与你的awesome-header相关的HTML / JS代码放在模板中(比如 _awesome-header.gsp ,'_'很重要!)
  • 只需将该行放在“简单”布局中,并放在与“简单”布局无关的所有其他页面中:<g:render template='awesome-header'/>