Grails不会将变量传递给嵌套模板

Qua*_*Bit 4 grails controller view grails-controller

当我从控制器渲染视图时,传递给视图的变量位于视图中呈现的所有模板的范围内,包括嵌套在多个深层的模板.

但是,当我从控制器渲染模板时(如在ajax样式中),只有初始模板似乎可以访问变量,并且嵌套模板调用不共享此信息.例:

Views & Templates:
a.gsp
_b.gsp
_c.gsp
_one.gsp
_two.gsp
_three.gsp

//PasserController.groovy
class PasserController{
    def v = {
       render(view:"a", model:[time:System.currentTimeMillis()])
    }

    def t = {
        render(template:"one", model:[time:System.currentTimeMillis()])
    }
}    

//a.gsp
A Time is: ${time}<br />
<g:render template="b" />

//_b.gsp
B Time is: ${time}<br />
<g:render template="c" />

//_c.gsp
C Time is: ${time}<br />

//_one.gsp
One Time is: ${time}<br />
<g:render template="two" />

//_two.gsp
Two Time is: ${time}<br />
<g:render template="three" />

//_three.gsp
Three Time is: ${time}<br />
Run Code Online (Sandbox Code Playgroud)

输出如下:

For passer/v
A Time is: 1309188408223
B Time is: 1309188408223
C Time is: 1309188408223
Run Code Online (Sandbox Code Playgroud)

For passer/t
One Time is: 1309188515894
Two Time is: 
Three Time is:
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释为什么视图上的表观变量范围是所有子模板,包括那些嵌套在其他模板中的子模板,但直接呈现的模板上的范围只是那个模板而不是嵌套模板?

如果这是故意的(不是一个bug),它有点令人伤心,因为对这个站点的要求非常复杂,而taglibs在这种情况下并不是真正有用的选项.此外,由于这是ajax,我们有许多操作需要渲染模板而不是视图,并且那些结果模板可能非常复杂并且嵌套在结构中.还有另一种方法吗?

感谢您的时间和帮助,我意识到这是一个很长的帖子!

Igo*_*nov 7

您可以将此参数作为参数传递: <g:render template="two" model="${[time: time]}"/>