创建新应用时,两个视图分别是 main.html 和 index.html。main 从未显式呈现,它被扩展为
#{extends 'main.html' /}
当变量仅从另一个视图 (index.html) 扩展时,如何将变量传递给视图 (main.html)?
创建新应用时,两个视图分别是 main.html 和 index.html。main 从未显式呈现,它被扩展为
#{extends 'main.html' /}
当变量仅从另一个视图 (index.html) 扩展时,如何将变量传递给视图 (main.html)?
如果它被传递给 render 方法,它将正常可用。整个视图(包括扩展和包含)由 Groovy 模板引擎呈现。
但是,在main.html
通常在每个视图上扩展的情况下,最好的选择是始终renderArgs
使用注释将其添加到地图中@Before
,如下所示。这确保它始终可用,并且您不会重复自己 (DRY)。
@Before
private void setup() {
renderArgs.put("somekey", "somevalue");
}
这样,您无需在每次渲染调用时将 somekey 传递给渲染方法。
然后,在您的 中main.html
,您可以somekey
简单地使用 的标准方法进行访问$somekey
。
Codemwnci 给出了如何从控制器内部将变量传递给布局模板的解决方案。以下是如何将变量从普通视图传递到布局视图:
在您的 index.html 中,您可以执行以下操作:
#{set title:'My title'/}
在您的 main.html 中,您可以“获取”在 index.html 中设置的变量:
<h1>#{get 'title'/}</h1>
如果您使用的是Rythm或Japidextends
模板引擎,那么您可以在语句中直接将变量传递给 main.html
在 Rythm 模板引擎中,假设您的 main.html 是:
@args String title
...
<h1>@title</h1>
...
您可以使用以下语句扩展 index.html 中的主模板:
@extends(main, "my title")