【发布时间】:2017-04-11 16:05:07
【问题描述】:
尽管阅读了文档,但我发现一些用于将数据从控制器传递到视图的 Grails 约定有点不透明。几个基本问题:
这里有一些问题:
1) 在为“Person”控制器创建的脚手架中,索引操作以
结尾respond Person.list(params) model:[personCount: Person.count()]
在 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) 最后,“响应”和“渲染”之间的区别的简明描述是什么?它们似乎都将数据从控制器传递到视图。
【问题讨论】:
-
如果有什么安慰的话,我也觉得响应非常神秘,因为它具有内在的魔力,如果你的情况不完全符合,你真的不知道发生了什么或如何使用一个例子。例如。我想用两个对象进行响应,但我不知道如何执行此操作,因为文档说您只能将单个对象作为参数(+ 参数参数)传递。如果您需要使用参数参数来传递其他对象,或者如果您有两个对象而不是对象,这会让人感到困惑。我阅读了响应文档并决定渲染会节省大量调试时间
-
有趣的是,我已经在 Grails 中编写了数百个 JSON API 和数千个 UI 控制器。我几乎从未遇到过 API 控制器方法和输出与 UI 控制器方法之间存在重叠的情况,因此在我的情况下,响应无济于事。