当我从控制器渲染视图时,传递给视图的变量在视图中渲染的所有模板的范围内,包括嵌套几个级别的模板。
但是,当我从控制器(如 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 />
输出如下:
For passer/v
A Time is: 1309188408223
B Time is: 1309188408223
C Time is: 1309188408223
和
For passer/t
One Time is: 1309188515894
Two Time is:
Three Time is:
谁能向我解释为什么视图上的明显变量范围是所有子模板,包括嵌套在其他模板中的子模板,但直接呈现的模板上的范围只是该模板而不是嵌套模板?
如果这是故意的(不是错误),这有点令人难过,因为该站点的要求非常复杂,并且在这种情况下,标签库并不是一个真正有用的选择。此外,由于这是 ajax,我们有许多操作需要渲染模板而不是视图,并且这些生成的模板可能非常复杂并且嵌套在结构中。还有另一种方法可以做到这一点吗?
感谢您的时间和帮助,我意识到这是一个很长的帖子!