4

コントローラーからビューをレンダリングすると、ビューに渡される変数は、数レベルの深さでネストされたテンプレートを含め、ビューでレンダリングされるすべてのテンプレートのスコープ内にあります。

ただし、(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 であるため、ビューの代わりにテンプレートをレンダリングする必要がある多くのアクションがあり、それらの結果のテンプレートは非常に複雑で、構造がネストされている可能性があります。これを行う別の方法はありますか?

お時間とご協力ありがとうございます。長い投稿だったことに気づきました。

4

1 に答える 1

7

この引数をパラメーターとして渡すことができます。<g:render template="two" model="${[time: time]}"/>

于 2011-06-29T04:46:39.663 に答える