【发布时间】:2009-12-15 20:51:46
【问题描述】:
我希望我的主布局有条件地放入一些我想在单独文件中定义的 html 块。
我定义了不止一种导航栏。我想为每个导航栏创建一个文件。然后我想在我的控制器或特定 gsp 文件中设置一个变量,以便布局选择要使用的导航器。
【问题讨论】:
我希望我的主布局有条件地放入一些我想在单独文件中定义的 html 块。
我定义了不止一种导航栏。我想为每个导航栏创建一个文件。然后我想在我的控制器或特定 gsp 文件中设置一个变量,以便布局选择要使用的导航器。
【问题讨论】:
您可以通过几种不同的方式完成此操作。我建议尝试在您的布局中使用类似的第一种方式:
<g:if test="${nav == 'nav1'}">
<g:render template="/nav/nav1" />
</g:if>
<g:elseif test="${nav == 'nav2'}">
<g:render template="/nav/nav2" />
</g:elseif>
<g:else>
<g:render template="/nav/default" />
</g:else>
为了呈现这些模板,您必须具有以下文件:
grails-app/views/nav/_nav1.gspgrails-app/views/nav/_nav2.gspgrails-app/views/nav/_default.gsp请注意,由于模板是“根相对”的,因此它从 grails-app/views 目录的根目录解析模板。请参阅user guide section on Views and Templates 了解更多信息。
另一种方法是根据这样的参数(在您的布局中)动态呈现导航:
<g:render template="/nav/${nav ?: 'default'}" />
或者如果你想再深入一点,你可以做一些事情like this。
如果您仍然遇到问题,那么我想还有其他一些事情被遗漏了,比如将一些模型参数传递给 render tag。
【讨论】:
是的,您只需要在 g:render 语句周围加上条件。你可以这样做
<% if (condition) { %>
<g:render template="/common/topbar" />
<% } %>
或
<g:if test="yourcondition">
<g:render template="/common/topbar" />
</g:if>
【讨论】: