コントローラーからビューをレンダリングすると、ビューに渡される変数は、数レベルの深さでネストされたテンプレートを含め、ビューでレンダリングされるすべてのテンプレートのスコープ内にあります。
ただし、(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:
ビューの明らかな変数スコープが、他のテンプレート内にネストされたものを含むすべてのサブテンプレートである理由を誰かに説明できますが、直接レンダリングされたテンプレートのスコープはそのテンプレートのみであり、ネストされたテンプレートではありませんか?
これが意図的なもの (バグではない) である場合、このサイトの要件は非常に複雑であり、この場合、taglibs は実際には有用なオプションではないため、悲しいことです。また、これは ajax であるため、ビューの代わりにテンプレートをレンダリングする必要がある多くのアクションがあり、それらの結果のテンプレートは非常に複雑で、構造がネストされている可能性があります。これを行う別の方法はありますか?
お時間とご協力ありがとうございます。長い投稿だったことに気づきました。