【问题标题】:Can a Grails Layout call a template?Grails 布局可以调用模板吗?
【发布时间】:2009-12-15 20:51:46
【问题描述】:

我希望我的主布局有条件地放入一些我想在单独文件中定义的 html 块。

我定义了不止一种导航栏。我想为每个导航栏创建一个文件。然后我想在我的控制器或特定 gsp 文件中设置一个变量,以便布局选择要使用的导航器。

【问题讨论】:

    标签: templates grails layout


    【解决方案1】:

    您可以通过几种不同的方式完成此操作。我建议尝试在您的布局中使用类似的第一种方式:

    <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.gsp
    • grails-app/views/nav/_nav2.gsp
    • grails-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

    【讨论】:

      【解决方案2】:

      是的,您只需要在 g:render 语句周围加上条件。你可以这样做

      <% if (condition) { %>
       <g:render template="/common/topbar" />
      <% } %>
      

      <g:if test="yourcondition">
       <g:render template="/common/topbar" />
      
      </g:if>
      

      【讨论】:

      • 您好 Jean,我在布局内使用渲染时遇到问题。他们在常规 gsp 内工作得很好。当它们成为布局的一部分时,它们未执行。
      猜你喜欢
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多