Когда я отображаю представление из контроллера, переменные, передаваемые в представление, входят в область действия всех шаблонов, представленных в представлении, включая шаблоны, вложенные на несколько уровней глубиной.
Однако, когда я отображаю шаблон из контроллера (как в стиле 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, у нас есть много действий, которые должны будут отображать шаблоны вместо представлений, и эти полученные шаблоны могут быть довольно сложными и вложенными в структуру. Есть ли другой способ сделать это?
Спасибо за ваше время и помощь, я понимаю, что это был длинный пост!