Некоторые из соглашений Grails для передачи данных от контроллера к представлению Я нахожу немного непрозрачным, несмотря на чтение документации. Несколько основные вопросы:Grails render v response - соглашения для передачи данных контроллеру
Вот некоторые вопросы:
1) в строительных лесах, созданные для управления 'лицом', действие индекса заканчивается
respond Person.list(params) model:[personCount: Person.count()]
In в index.gsp, то список отображается в браузере, используя:
<f:table collection="${personList}" />
Мой вопрос в том, откуда взялась эта переменная personList? Или иначе, как результат работы Person.list (...) в контроллере появился в представлении с именем personList? Есть ли обобщать правило о том, если вы звоните
respond foo
и Foo список, то он будет отображаться в контроллере под названием «fooList»?
2) Если вы можете предоставить объект контроллеру, просто произнеся «render foo», какова цель параметра модели? т.е. есть некоторая разница между
respond foo
и
respond model:[foo: foo]
Похоже, что оба будут доступны в окне просмотра с помощью "${foo}"
3) И, наконец, что такое краткое описание разницы между «отвечать» и «отображать»? Кажется, что они передают данные с контроллера на представление.
Если у вас есть утешение, я также нахожу ответ очень загадочным, поскольку он делает внутреннюю магию, и вы действительно не знаете, что происходит или как использовать, если ваш случай не соответствует следующему примеру. Например. Я хочу ответить двумя объектами, и я не знаю, как это сделать, поскольку в документации говорится, что вы можете передавать только один объект в качестве параметра (+ параметр аргумента). Если вам нужно использовать параметр аргумента для передачи дополнительных объектов, или вместо объекта, если у вас их два, это путает. Я прочитал документацию для ответа и решил, что рендеринг сэкономит много времени на отладку –
Интересно, что я написал сотни API JSON и тысячи контроллеров пользовательского интерфейса в Grails. У меня почти никогда не было ситуации, когда существует совпадение между методами контроллера API и выходом и методами контроллера UI, поэтому ответ не помог бы в моих случаях. –